2013-02-23 65 views
1

这段代码在Chrome的JavaScript控制台中产生错误&我不知道为什么。在搜索了类似问题的人之后,我还没有找到任何D:Uncaught TypeError:属性'which'的对象#<Object>不是函数

错误消息表明问题出在event.which(),但我没有看到我如何使用它与预期不同,其他有类似的人似乎没有问题。

$(document).keypress(function(event) { 
    switch (event.which()) {    
     case 38 : keyNorthPressed = true; 
        break; 
     case 39 : keyEastPressed = true; 
        break; 
     case 40 : keySouthPressed = true; 
        break; 
     case 41 : keyWestPressed = true; 
        break; 
    } 
}); 

在此先感谢。

+1

错误告诉你'event.which'不是一个函数,而且看[**文档**](http://api.jquery.com/event.which/)证实了这一点。这些示例显示了如何使用它。 – 2013-02-23 13:12:04

+0

好的,我的印象是'switch'声明并不一定需要函数,但是价值会起作用,是不是这种情况? – gideonparanoid 2013-02-23 13:14:02

+1

当然,您可以将任何值传递给'switch'。这个问题与'switch'无关。你正在尝试**调用''event.which',但它不是一个函数。只要做'switch(event.which){'。其他例子:'var foo = {bar:5};'。 'foo.bar()'会抛出相同的错误,因为'foo.bar'是一个数字,而不是函数。 – 2013-02-23 13:15:13

回答

1

答案here

有两种可能的方式2检索事件关键代码:

event.keyCode or event.which 

你的代码应该是:

$(document).keypress(function(event) { 
    var code = event.keyCode || event.which; 
    switch(code) {  
     case 38 : keyNorthPressed = true; 
        break; 
     case 39 : keyEastPressed = true; 
        break; 
     case 40 : keySouthPressed = true; 
        break; 
     case 41 : keyWestPressed = true; 
        break; 
    } 
}); 

event.keyCode和event.which是属性,而不是方法,你可以用()调用它们。

相关问题