2016-08-26 36 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>