<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>按下键盘,显示keyCode</title>
<style>
body {
text-align: center;
font: 30px/1.5;
}
</style>
<script type="text/javascript">
window.onload = function() {
var oP = document.getElementsByTagName("p")[0];
document.onkeydown = function(event) {
var event = event || window.event;
oP.innerHTML = event.keyCode;
return false;
}
}
</script>
</head>
<body>
<p>这里将显示您按下键的 keyCode</p>
</body>
</html>
-----------------------------------------------------------------------------------------------------
第一:为什么var event = event || window.event;不是写在document.onkeydown函数外,不是先兼容再传参数吗?
第二:为什么删了参数event和 var event = event || window.event;后,不管在哪个浏览器测试,依然没有问题?
2 回答
已采纳
pardon110
TA贡献1038条经验 获得超227个赞
第一个问题源于浏览器对事件对象解析。理论上只要各大浏览器厂商使用相同的api.就不用写一些兼容性代码。写在onkeydown函数内,是为了获取按键一动作产生的事件(keydown事件)。
第二问题。删除 代码没问题,只是你第用的浏览器版本太接近现代版本了(新版本各大浏览器api趋向一支致)。说白点,弄几个 低版本的浏览器测,比如ie6,7,8试试。或者在线一些不同版本内核的浏览器测试软件看看。
好的好的
TA贡献2条经验 获得超0个赞
补充下, 在现代大多数浏览器中, 一次事件的事件对象(event), 是传给回调函数(callback)的, 于是你可以在你自己写的事件回调中定义形参(e或event或无论什么)拿到这个event对象,但是!! 瓜皮老IE,它的每次事件触发后, 不是通过回调函数把event给调用者, 而是直接赋给了window.event这个全局属性!!(脑残吧!) 所以,这个时候只能通过window.evnet访问了,综上所述,是为了兼容低版本IE。 所以,这段代码当然要放在回调内部, 放在外部的话, window.event还没被赋值呢。
添加回答
举报
0/150
提交
取消