我有一个页面,当按下 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下无效。是否有任何解决方法可以解决此问题?
提前致谢!
答案 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>
你最好使用一个能够消除所有丑陋的跨浏览器不一致性的库。随你选择: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
,它非常轻巧和友好,你可以做那些事情:)