一个对象中的Javascript键盘事件(Javascript keyboard event in an object)

我让我的键盘以一种简单的方式工作:

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); }

更多推荐