以下脚本执行其应该执行的操作,即它对“向左箭头”和“向右箭头”键做出反应。但是,由于键码冲突,它也会对单引号做出反应。它使得无法将该字符输入到输入字段中。对此可以采取什么措施吗?
<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)
返回单引号。
你想要的keyCode
如果该属性位于事件对象中:
var keycode = "keyCode" in e ? e.keyCode : e.which;
这样,当事件对象中存在该属性时,并且当which
财产也存在。
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
.
跨浏览器工作的完整 HTML 示例:
<!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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)