2013-05-13 23 views
1

我一直在寻找附着DOM事件避免了浏览器兼容性问题的最适当的方式,发现Mozilla developers网站指出:事件处理程序设置为DOM对象

老的方法是只给它分配是这样的:

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

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

什么类型的问题,这是否是指什么?

+3

其一,如果您尝试两个处理程序连接到相同的元素相同的事件,第二个将替换第一个。通常的期望是一个事件可能有许多处理程序。当你将这两种方法结合起来时,会发生什么,但也不是很明显。 (即,“分配”一个处理程序替换之前的“已添加”的程序吗?它们是否都被调用?是否可以“移除”已分配的处理程序?我确定所有这些都是指定的,但最好是坚持一种方法而不是保持在你的脑海里。) – millimoose 2013-05-13 21:45:44

+2

我建议阅读http://www.quirksmode.org/js/events_tradmod.html。它也提到了一些问题。 – 2013-05-13 22:02:46

回答

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 7have one more issue,这就是说它们也会返回元素name='id'而不是只有元素id='id'。这可能真的让你感到厌烦。

看一看jQuery一种方式附加DOM事件处理程序,避免浏览器兼容性问题。

1

我能想到的最大的问题是,它不会允许这样做的另一个.onclick = fn;你基本上解除绑定以前的处理程序,如果它在那里分配多个点击处理。

即使奇迹般地工作,你就没有办法注销一个特定的处理程序;这是全部或没有。

相关问题