Javascript键码冲突:“向右箭头"和“单引号" [英] Javascript keycode clash: "right arrow" and "single quote"
问题描述
以下脚本执行应做的工作,即,它对键左箭头"和右箭头"作出反应.但是,由于键码冲突,它也会对单引号做出反应.这样就不可能在输入字段中输入该字符.可以采取任何措施吗?
The following script does what it should, that is, it reacts on the keys "arrow left" and "arrow right". However, due to a keycode clash, it reacts on a single quote as well. It makes it impossible to enter that character into an input field. Can anything be done about that?
<script type="text/javascript">
onload = function(){
document.onkeypress=function(e){
if(window.event) e=window.event;
var keycode=(e.keyCode)?e.keyCode:e.which;
switch(keycode){
case 37: window.location.href='set.jsp?index=5';
break;
case 39: window.location.href='set.jsp?index=7';
break;
}
}
}
</script>
推荐答案
当用户按下单引号键时, e.keyCode
属性为零,而 e.which
属性为39.执行 String.fromCharCode(39)
返回单引号.
When the user presses the single quote key, the e.keyCode
property is zero, and the e.which
property is 39. Executing String.fromCharCode(39)
returns a single quote.
如果该属性位于事件对象中,则需要 keyCode
:
You want the keyCode
if that property is in the event object:
var keycode = "keyCode" in e ? e.keyCode : e.which;
当事件对象中的keyCode属性存在,并且 which
属性也存在时,keyCode的值为零.
That way you get zero for the keyCode when that property exists in the event object, and when the which
property also exists.
document.onkeydown = function(event) {
event = event || window.event;
var keyCode = "keyCode" in event ? event.keyCode : event.which;
switch (keyCode) {
case 37: console.log("37 was pressed", event); break;
case 39: console.log("39 was pressed", event); break;
}
};
编辑#1:其他评论者和答案正确.我忘记了您不应该通过 keypress
事件检测控制键.更改为 onkeydown
.
Edit #1: Other commenters and answers are correct. I forgot you shouldn't be detecting control keys with keypress
events. Changed to onkeydown
.
可以在浏览器中使用的完整HTML示例:
Full HTML example that works cross browser:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Key Codes Test</title>
</head>
<body>
<script type="text/javascript">
document.onkeydown = function(event) {
event = event || window.event;
var keyCode = "keyCode" in event ? event.keyCode : event.which;
switch (keyCode) {
case 37: console.log("37 was pressed", event); break;
case 39: console.log("39 was pressed", event); break;
}
};
</script>
<input type="text" size="30">
</body>
</html>
这篇关于Javascript键码冲突:“向右箭头"和“单引号"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!