我让我的键盘以一种简单的方式工作:
rightPressed = false; onKeyDown = function(pressEvent) { if (pressEvent.keyCode == 39) rightPressed = true; } onKeyUp = function(pressEvent) { if (pressEvent.keyCode == 39) rightPressed = false; } $(document).keydown(onKeyDown); $(document).keyup(onKeyUp);它奏效了。 然后我试着把它放在一个班级里:
function Tkeyboard(){ this.rightPressed = false; this.onKeyDown = function(pressEvent) { if (pressEvent.keyCode == 39) { this.rightPressed = true; alert("boom!"); } } this.onKeyUp = function(pressEvent) { if (pressEvent.keyCode == 39) { this.rightPressed = false; } } $(document).keydown(this.onKeyDown); $(document).keyup(this.onKeyUp); }在初始化时我创建了一个对象:
keys = new Tkeyboard;在主循环中我把行动:
if ( keys.rightPressed ) { rx+=1;}现在它失败了。 问题的有趣部分是调用警报(“繁荣!”),因此变量也应该被修改......
我会很感激任何想法。
I got my keyboard working in a simple way:
rightPressed = false; onKeyDown = function(pressEvent) { if (pressEvent.keyCode == 39) rightPressed = true; } onKeyUp = function(pressEvent) { if (pressEvent.keyCode == 39) rightPressed = false; } $(document).keydown(onKeyDown); $(document).keyup(onKeyUp);And it worked. Then i tried to put it all in a class:
function Tkeyboard(){ this.rightPressed = false; this.onKeyDown = function(pressEvent) { if (pressEvent.keyCode == 39) { this.rightPressed = true; alert("boom!"); } } this.onKeyUp = function(pressEvent) { if (pressEvent.keyCode == 39) { this.rightPressed = false; } } $(document).keydown(this.onKeyDown); $(document).keyup(this.onKeyUp); }In initialization I created an object:
keys = new Tkeyboard;In main loop i put action:
if ( keys.rightPressed ) { rx+=1;}And now it fails. The interesting part of the problem is that alert("boom!") is called, so variable should get modified too...
I would be grateful for any ideas.
最满意答案
在jQuery (和DOM事件)中的事件处理程序中, this指的是事件订阅的元素(示例中的document )。 如果要引用原始对象,请使用闭包 。
function Tkeyboard(){ var self = this; this.rightPressed = false; this.onKeyDown = function(pressEvent) { if (pressEvent.keyCode == 39) { self.rightPressed = true; alert("boom!"); } } this.onKeyUp = function(pressEvent) { if (pressEvent.keyCode == 39) { self.rightPressed = false; } } $(document).keydown(this.onKeyDown); $(document).keyup(this.onKeyUp); }In an event handler in jQuery (and in DOM events), this refers to the element the event is subscribed on (document in the sample). Use a closure if you want to refer to the original object.
function Tkeyboard(){ var self = this; this.rightPressed = false; this.onKeyDown = function(pressEvent) { if (pressEvent.keyCode == 39) { self.rightPressed = true; alert("boom!"); } } this.onKeyUp = function(pressEvent) { if (pressEvent.keyCode == 39) { self.rightPressed = false; } } $(document).keydown(this.onKeyDown); $(document).keyup(this.onKeyUp); }更多推荐
发布评论