【问题标题】:Uncaught TypeError: Property 'which' of object #<Object> is not a function未捕获的类型错误:对象 #<Object> 的属性“哪个”不是函数
【发布时间】:2013-02-23 13:10:33
【问题描述】:

这段代码会在 Chrome 的 JavaScript 控制台中生成该错误,我不知道为什么。在谷歌搜索有类似问题的人之后,我没有找到任何 D:

错误消息表明问题出在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;
    }
});

提前致谢。

【问题讨论】:

  • 错误告诉您event.which 不是函数,查看the documentation 可以确认这一点。示例展示了如何使用它。
  • 好吧,我的印象是 switch 语句不一定需要函数,但值会起作用,不是这样吗?
  • 当然,您可以将任何值传递给switch。该问题与switch 无关。您正在尝试调用 event.which,但它不是函数。只需执行switch(event.which) {。其他示例:var foo = {bar: 5};。 foo.bar() 会抛出同样的错误,因为 foo.bar 是一个数字,而不是一个函数。
  • 对,行得通。谢谢你。我很感兴趣为什么它会尝试调用event.which,而不是代码中的event.which()?
  • 我不明白。将() 放在符号之后总是被解释为函数调用。如果符号未引用函数,则会出现错误,因为只能调用函数。它正在尝试调用event.which,因为您通过在event.which 之后添加() 来告诉它这样做。

标签: javascript jquery switch-statement


【解决方案1】:

答案here。

两种检索事件键码的可能方式:

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.是属性,不是方法,不能用()调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2014-06-20
    • 1970-01-01
    相关资源
    最近更新 更多