有人能用简单的术语向我解释IE和DOM标准事件模型之间的区别吗?
答案 0 :(得分:1)
您的代码不符合DOM事件2:dom事件从具有“捕获阶段”的文档元素开始,然后向下到目标,然后向上冒泡到文档元素。在IE中实现它非常困难。
示例:
<body> <div id="div1"><div id=div2></div></div></body>
如果“click”事件在div2上触发,则eventListeners运行为:
在您的代码中,您假设所有侦听器都处于泡沫阶段,但这不是一个好主意,因为例如“焦点”事件没有泡沫阶段,并且无法正确运行您的代码。
答案 1 :(得分:0)
他们大多数做同样的事情*,但你只需要确定客户使用哪个浏览器使用哪一个。 Dustin Diaz创建了此命名空间,以便轻松确定要使用的事件模型:
var Event = {
add: function() {
if (window.addEventListener) {
return function(el, type, fn) {
DOM.$(el).addEventListener(type, fn, false);
};
} else if (window.attachEvent) {
return function(el, type, fn) {
var f = function() {
fn.call(DOM.$(el), window.event);
};
DOM.$(el).attachEvent('on' + type, f);
};
}
}()
};
* - 我说“大部分”都是一样的,因为你会注意到DOM addEventListenter
在最后需要一个额外的参数,这表明是否使用事件捕获( true
)或冒泡(false)。事件从DOM树中的根元素或DOM树上的源元素触发,因此该标志确定event.stopPropagation
函数的作用。 捕获意味着该元素可以调用event.stopPropagation
来停止事件传播到其子元素。 冒泡表示浏览器可以调用event.stopPropagation
来阻止事件传播到其父元素。