2016-08-26 37 views
-3

我不知道为什么它的工作:JS/JQuery的开关不能正常工作

$(document).keypress(function(event){ 
var keycode = (event.keyCode ? event.keyCode : event.which); 

if(keycode == '13') 
{ 
    key_click("ent");  
} 
}); 

,但它不工作:

$(document).keypress(function(event){ 
var keycode = (event.keyCode ? event.keyCode : event.which); 

switch(keycode) 
{ 
    case '13': key_click("ent"); break; 
} 
}); 

我需要开关,因为我想在交换机添加更多选项。

+6

'keycode'是Number。 'case'13''不匹配。只有使用'event.which;' – Tushar

回答

1

做到这一点

switch(keycode) 
{ 
    case 13: key_click("ent"); break; 
} 
2

由于密钥号码是号码类型不是字符串类型,

在您若条件:

if(keycode == '13') // not checked with strict equality operator so it works 

但在你开关:

case '13': // switch case checks with strict equality so it won't work. 

您需要使用:

case 13: 
1

为了演示,这个工程:

if(keycode == '13') 
{ 
    key_click("ent");  
} 

并不:

if(keycode === '13') 
{ 
    key_click("ent");  
} 

通知中所使用的运营商的差异。与==相比,JavaScript对类型不严格,因此13 == '13'true。但是,===运营商严格类型,所以13 === '13'false

switch运营商也是严格的。使用时只需将相同类型的比较:

switch(keycode) 
{ 
    case 13: key_click("ent"); break; 
} 
+0

哦,谢谢!我没有想过 – Krystian

1

变化:

case '13': 

要:

case 13: 
0

如果你输入的字符串,那么你可以使用下列内容:

var keycode = "13"; 
 
switch(keycode) 
 
{ 
 
    case '13' : console.log("case 13"); break; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>