直接在html里实现,代码正常运行
<body onkeydown = "alert(event.keyCode)"></body>通过js的dom对象绑定事件监听函数实现
window.onload = function(e) {
    document.body.addEventListener('keydown', function(e){
         alert(e.keyCode);
    }, false);
}
这段代码却无法运行如果将第二段代码中的 document.body 换成 document也能运行请问这是什么原因?

解决方案 »

  1.   

    不知道你用的是哪个浏览器,你的方法适用于Mozilla系列浏览器
    IE:
    document.body.attachEvent("onkeydown",function(e){alert(e.keyCode);});
      

  2.   

    2楼的代码IE下确实能跑,但是我的代码为什么在firefox下会出现那样的问题呢?
      

  3.   

    各个浏览器是有差异的,它的解析是有分别的,一般firefox对js规则支持的更为标准。ie会有很多自己的容错性处理。
      

  4.   

    不太懂啊,难道在firefox里那样写是错的吗?直接在html里绑定事件监听函数和通过dom绑定事件监听函数有什么区别?
      

  5.   

    js里面的dom对象和对应的html的标签是否支持相同的事件呢?
    http://www.w3school.com.cn/htmldom/event_onkeydown.asp
    按照上面网页的内容,好像是不一样的。但我验证了一下,它所说的也不全对。
      

  6.   

    经测试,在firefox中,这样去绑定事件
    document.body.addEventListener('keydown', function(e){
    alert(e.keyCode);
    }, false);
    如果页面上有元素,在任何元素获得焦点时,再按键可以触发keydown事件。
    可能是document.body获得的范围是页面已有的元素吧。
      

  7.   

    嗯,应该是firefox的问题,ie下和chrome下都正常。或者直接用document也行。
    在网上找到一个链接
    http://www.webdeveloper.com/forum/showthread.php?t=177110
      

  8.   

    document包含document.body
    差不多是html跟body那样
      

  9.   

    个人猜测:在FF宿主环境中,键盘事件方法(keydown等)被内置(仅内置)在“window”和“document”“根”对象上,且只能在HTML文档装载完毕后才允许触发。想想也是啊,键盘与“body”有多大关联呢?