onKeyUp没有为IE中的ESC触发

时间:2011-04-05 15:56:35

标签: javascript internet-explorer keyboard-events

我有一个页面,当按下 Esc 时,我必须关闭对话框。我为此任务编写了以下简化代码示例:

<html>
<head>
<script language="JavaScript">
function keyUpExample() {
alert('on' + event.type + ' event fired by ' + '"' + event.srcElement.id + '" ' + ' ' +        event.which) 
} 
</script>
</head>
<body id="myBody" onkeyup="keyUpExample()">
    Trying keyUp event: Press any key...
</body>
</html>

这在Chrome下可以正常运行,但在IE 7下无效。是否有任何解决方法可以解决此问题?

提前致谢!

5 个答案:

答案 0 :(得分:3)

关键事件不必被正文捕获,但文档或窗口可以跨浏览器工作。此外,keyCode为keyup或down事件返回正确的值。

<!doctype html>
<html lang="en">
<head>
<meta charset= "utf-8">
<title>Small Page</title>
<html>
<head>
<script>
function keyUpExample(e){
    e=e || window.event;
    var  who= e.target || e.srcElement;
    alert(e.type+' caught at '+who.nodeName+ ': key #'+e.keyCode) 
}
window.onload=function(){
    document.onkeyup= keyUpExample; 
    document.body.onkeyup= keyUpExample;    
}
</script>
</head>
<body>
    Trying keyUp event: Press any key...
</body>
</html>

答案 1 :(得分:1)

event作为参数传递给回调,并检查IE的window.event

<html>
<head>
<script>
function keyUpExample(e) {
    e = e || window.event;
    alert('on' + e.type + ' event fired by ' + '"' + e.srcElement.id + '" ' + ' ' +        e.which) 
} 
</script>
</head>
<body id="myBody" onkeyup="keyUpExample()">
    Trying keyUp event: Press any key...
</body>
</html>

Demo

element.onkeyup reference

然而

你最好使用一个能够消除所有丑陋的跨浏览器不一致性的库。随你选择:jQuery,Prototype,YUI,Dojo,MooTools,RightJS ......

答案 2 :(得分:1)

你被允许使用jQuery吗?如果是这样,那么您可以使用.keyup()完成它。

使用jQuery也意味着您通常可以将跨浏览器的担忧留给其他人。

答案 3 :(得分:0)

function keyUpExample(e) {
  var evt = e || event;
  alert('on' + evt.type + ' event fired by ' + '"' + ((evt.srcElement)?evt.srcElement.id:evt.target.id) + '" ' + ' ' +        ((evt.which)?evt.which:evt.keyCode)) 
} 

答案 4 :(得分:0)

实际上非常简单,原始的JavaScript解决方案看起来有点像这样

function callback(event) {
  if (event.keyCode == 27) {
    alert('Here you go!');
  }
}

if (document.addEventListener) {
  document.addEventListener('keydown', callback, false);
} else {
  document.attachEvent('onkeydown', callback);
}

只需将其附加到document,无需任何onload技巧。

此外,正如人们建议你的那样,检查RightJS,它非常轻巧和友好,你可以做那些事情:)

http://rightjs.org/plugins/keys