注意: attachEvent仅支持IE(edge也不支持),在IE8中,先绑定的后执行,但在IE9以及后续版本中,先绑定的先执行。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js测试</title> </head> <body> <div id="outer"> 外层DIV <div id="inner">内层DIV</div> </div> <script> var outer = document.getElementById('outer'); var inner = document.getElementById('inner'); /** * addEventListener 为Dom元素绑定事件 * 参数1:事件名称(以on开头) * 参数2:事件执行的函数 * 说明: * DOM2级事件规定的事件流包括三个阶段。 * 第一个阶段是事件捕获阶段,从外往内传递; * 第二个阶段是处于目标阶段,这个阶段中参数3设置false或true都一样,按照绑定先后顺序执行。 * 第三个阶段是冒泡阶段,从内往外传递。 * 注意: * IE8以及早期版本只支持事件冒泡。IE8中attachEvent先绑定的后执行,IE9以及更新版中先绑定的先执行。 * 以下的注释都针对点击一次“内层DIV” */ outer.attachEvent('onclick', function(event){ console.log('outer clicked! 004'); // 最后执行,因为最先绑定且为最外层 }); outer.attachEvent('onclick', function(event){ console.log('outer clicked! 003'); // 第三执行,因为最外层第二个绑定 }); inner.attachEvent('onclick', function(event){ console.log('inner clicked! 002'); // 第2执行,因为目标元素而且倒数第二绑定 }); inner.attachEvent('onclick', function(event){ console.log('inner clicked! 001'); // 第1执行,因为是目标,且最后绑定 }); </script> </body> </html>
点击“内层DIV”执行结果为:
IE9中则为:
相关推荐
在IE8及以上版本,这两个方法也得到了支持,但在此之前,需要使用`attachEvent`和`detachEvent`,它们不支持事件捕获。 为了确保代码的兼容性,可以编写如下代码: ```javascript function addEvent(element, type...
对于不支持`addEventListener`和`removeEventListener`的旧版IE和Opera浏览器,可以使用`attachEvent`和`detachEvent`方法作为替代。但需要注意的是,这两个方法没有捕获阶段的概念,它们只处理事件冒泡。 在实际...
1. 兼容性:`attachEvent` 仅适用于IE,而 `addEventListener` 支持所有现代浏览器。 2. 事件处理程序的顺序:`attachEvent` 中的事件处理程序按照添加的顺序执行,`addEventListener` 则不会受添加顺序影响。 3. ...
而在Firefox(Mozilla)以及支持DOM标准的其他浏览器中,同时支持冒泡和捕获,事件的顺序是:捕获阶段(window -> document -> body -> html -> div)和冒泡阶段(div -> body -> html -> document -> window)。...
- **attachEvent()**:这是IE8及以下版本特有的方法,事件名前需要加“on”,如`attachEvent('onclick', handler)`,并且只在冒泡阶段处理事件。 阻止事件传播有多种方法: - **stopPropagation()**:此方法适用于...
`addEventListener` 和 `attachEvent` 分别适用于非 IE 和 IE 浏览器,它们之间的主要区别在于参数的要求以及是否支持事件捕获/冒泡的控制。在实际开发过程中,根据目标浏览器的特性选择合适的方法是非常重要的,...
相比之下,`attachEvent` 是IE浏览器特有的方法,仅适用于IE8及以下版本。它的语法稍微简单一些: 1. `element`:同样是要绑定事件的HTML节点。 2. `type`:事件名称,这次需要包括"on"前缀,如 "onclick" 或 ...
对于IE浏览器,其事件处理程序使用`attachEvent`和`detachEvent`方法,它们只支持冒泡阶段的事件处理。需要注意的是,由于匿名函数无法被引用,所以在IE中使用`detachEvent`移除事件处理程序时可能会遇到问题。 ...
对于不支持addEventListener的IE浏览器,可以使用attachEvent方法,它默认总是事件冒泡阶段调用处理函数。 当事件在DOM树中传播时,可以通过调用event.stopPropagation()方法来阻止事件进一步传播。在IE浏览器中,...
2. attachEvent 只能用于 IE8 及以下版本的 Internet Explorer 浏览器。 3. addEventListener 更通用,支持所有的现代浏览器和 IE9 以上版本。 4. 对于 IE9 及以上版本,应该使用 addEventListener,而不应使用 ...
事件模型分为三个阶段:冒泡、目标和捕获。在IE浏览器中,事件通常从最具体的元素(如一个按钮)开始,然后向上冒泡到更不具体的元素(如其父元素),直到到达文档的根节点。然而,通过事件捕获,我们可以选择在事件...
与W3C标准的`addEventListener`不同,`attachEvent`并不支持事件捕获阶段,并且它的事件处理函数会在事件冒泡的过程中执行。 在`attachEvent`中,事件处理函数的执行上下文(即`this`的值)会指向调用`attachEvent`...
但是要注意,`addEventListener`有第三个参数用于指定事件处理函数的执行顺序(默认为false,即事件冒泡阶段),而`attachEvent`没有这个参数,所以通常在使用`attachEvent`时不需要传递额外的参数。 尽管`onclick`...
而在IE8及以下版本,需要使用`attachEvent`来添加事件处理程序,它只支持事件冒泡,并且事件处理程序的执行顺序与添加顺序相反。 阻止事件冒泡是有时必要的,例如,我们可能只想让目标元素响应事件,不让其父元素...
`useCapture`参数是一个布尔值,通常设置为`false`,表示在事件冒泡阶段处理事件。与`attachEvent`不同,`addEventListener`添加的事件处理函数会按照添加的顺序执行,即`click1 -> click2 -> click3`。 为了实现跨...
第三个参数`useCapture`通常设置为`false`,表示事件冒泡阶段。 3. **事件处理程序赋值**: - 直接将函数赋值给事件属性,如 `obj.onclick = Foo`,这是较早的事件绑定方式,适用于大多数浏览器。这种方法简单直观...
由于IE只支持事件冒泡,所以同大多数情况下,都是将事件处理程序添加到事件流的冒泡阶段,即默认为”false” 这样可以最大限度地兼容各种浏览器。 最好只在需要在是事件到达目标之前截获它的时候将事件处理程序添加...
也就是说,如果在捕获阶段和冒泡阶段都为同一元素绑定了事件处理函数,那么捕获阶段的函数会先执行。 了解并熟练掌握这些事件处理机制,能帮助开发者更好地控制页面交互,提高用户体验。在实际开发中,推荐使用W3C...
IE事件的传播模式仅包含DOM2的冒泡阶段和目标阶段,且仅能捕获鼠标事件。事件处理程序的注册和删除使用`attachEvent`和`detachEvent`方法,事件类型前需要加上`on`前缀,如`onClick`。 总的来说,理解JavaScript的...