将事件处理程序设置为DOM对象

时间:2013-05-13 21:37:59

标签: javascript html events dom

我一直在寻找最合适的方法来附加DOM事件,避免浏览器兼容性问题,并发现Mozilla developers网站声明:

  

旧的方法就是这样分配:

document.getElementById('cupcakeButton').onclick = getACupcake;
     

如上所述,事件对象是全局对象或参数。这个   方法可能有问题,不是首选方法,但它仍然存在   工作,很多人仍然使用它。

这涉及哪些类型的问题?

2 个答案:

答案 0 :(得分:1)

我能想到的最大问题是它不允许分配多个点击处理程序,通过执行另一个.onclick = fn;你基本上解除了前一个处理程序的绑定(如果它在那里)。

即使神奇地工作,你也无法取消注册特定的处理程序;它是全有或全无。

答案 1 :(得分:1)

最明显的一个是it would replace a previously assigned handler

document.getElementById('id')应该适用于所有浏览器,除非是真正的旧浏览器(Netscape 4-, IE 4-),您应该分别使用document.layers['id']document.all[id]

IE 5 up to IE 7 have one more issue,他们也会返回name='id'而不是id='id'元素的元素。那可能真的让你失望。

查看jQuery以了解如何附加DOM事件处理程序以避免浏览器兼容性问题。