Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获类型错误:属性';其中';对象#<;对象>;这不是一个函数_Javascript_Jquery_Switch Statement - Fatal编程技术网

Javascript 未捕获类型错误:属性';其中';对象#<;对象>;这不是一个函数

Javascript 未捕获类型错误:属性';其中';对象#<;对象>;这不是一个函数,javascript,jquery,switch-statement,Javascript,Jquery,Switch Statement,这段代码在Chrome的JavaScript控制台中产生了这个错误&我不知道为什么。在谷歌搜索了有类似问题的人之后,我没有发现任何D: 错误消息表明问题出在事件。which()上,但我看不出我使用它与预期有什么不同,其他类似的人似乎没有问题 $(document).keypress(function(event) { switch (event.which()) { case 38 : keyNorthPressed = true;

这段代码在Chrome的JavaScript控制台中产生了这个错误&我不知道为什么。在谷歌搜索了有类似问题的人之后,我没有发现任何D:

错误消息表明问题出在
事件。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.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.event是属性,而不是方法,您不能用()调用它们。

答案

有两种可能的方法检索事件密钥代码:

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

错误告诉您
event.which
不是函数,查看一下就可以确认这一点。示例显示了如何使用它。好吧,我的印象是
开关
语句不一定需要函数,但值可以工作,不是吗?当然,您可以将任何值传递给
开关
。该问题与
开关
无关。您正试图调用
事件,但它不是一个函数。只需执行
switch(event.which){
。其他示例:
var foo={bar:5};
foo.bar()
就会抛出相同的错误,因为
foo.bar
是一个数字,而不是一个函数。对,这很有效。谢谢。我对它为什么尝试调用
event.which
而不是在代码中调用
event.which()
然后呢?我不明白。将
()
放在符号后面总是被解释为函数调用。如果符号没有引用函数,您会收到一个错误,因为只能调用函数。它正在尝试调用
事件。这是因为您通过添加
()
event.which
之后的
错误告诉您
event.which
不是一个函数,查看一下就可以确认这一点。示例演示了如何使用它。好的,我的印象是
switch
语句不一定需要函数,但值可以工作,不是这样吗?当然,您可以传递任何值值设置为
开关
。问题与
开关
无关。您正在尝试调用
事件。它
,但它不是一个函数。只需执行
开关(event.which){
。其他示例:
变量foo={bar:5};
foo.bar()
会抛出相同的错误,因为
foo.bar
是一个数字,而不是一个函数。是的,它可以工作。谢谢。我很想知道它为什么尝试调用
事件。哪个
而不是像在代码中那样,
事件。哪个()
那么?我不明白。放置
()
符号后始终被解释为函数调用。如果符号未引用函数,则会出现错误,因为只能调用函数。它试图调用
事件。which
,因为您通过在
事件之后添加
()
命令它这样做。which