JS事件冒泡、停止冒泡、addEventListener--实例演示

问题:

 <div class=‘item‘ id=‘outer‘ onclick="alert(‘outer‘)">
    <div class=‘item‘ id=‘inner‘ onclick="alert(‘inner‘);">
      <div class=‘item‘ id=‘core‘ onclick="alert(‘core‘)">
         core!!!!!
      </div>
    </div>
  </div>

1.上面div中,如果单击core,会执行多少个alert?先后顺序是上面?

冒泡就是处理DOM节点树中,各个节点绑定事件执行流程的一种方式;

因为各浏览器软件和相关组织间的差异,事件流有三种:事件冒泡事件捕获DOM事件流,其中DOM事件流已被所有主要浏览器实现;

2.chorme用的是冒泡事件流方式,这个例子解释了冒泡事件流的事件执行顺序;

3.  stopPropagation()是停止冒泡事件流。如果你在node A节点添加该方法,那么“泡泡“就在node A这个位置破了,其后的所有节点绑定事件都不执行;

3.同时使用了addEventListener,向某节点添加事件;

4.下面是代码,保存成html文件,看看效果;

<html>
<head>
  <style type="text/css">
     .item{
         display: table;
         margin: 100px;
     }
     #outer{
         width:400px;
         height:400px;
         background-color: blue;
     }
     #inner{
         vertical-align: middle;
         width:200px;
         height:200px;
         background-color: white;
     }
     #core{
         width:80px;
         height:80px;
         background-color: red;
         text-indent: 10px;
         line-height: 50px;
     }
  </style>

</head>
<body>
  <div class=‘item‘ id=‘outer‘ onclick="alert(‘outer‘)">
    <div class=‘item‘ id=‘inner‘ onclick="alert(‘inner‘);stopbubble(arguments[0])">
      <div class=‘item‘ id=‘core‘ onclick="alert(‘core‘)">
         core!!!!!
      </div>
    </div>
  </div>
</body>

<!--you must write <script> under <body>-->
<script type=‘text/javascript‘>
        var core = document.getElementById(‘core‘);
        core.addEventListener("click",function(){alert(‘dddddd‘)},false);
        //addEventListener: can add one more event to node "core"
        function stopbubble(e){
              e.stopPropagation();//stop bubble event on this node
        }
</script>
</html>

前端效果:

点击core!!!后:
1.先alert core 因为绑定了dddd,然后会alert  dddd;

2.然后冒泡到inner节点后,alert inner,但是同时执行stopbubble(arguments[0])来停止冒泡;

3.停止冒泡后,该node后续节点就不执行了,所以不会alert outer;

时间: 2024-08-07 16:59:01

JS事件冒泡、停止冒泡、addEventListener--实例演示的相关文章

js事件流机制冒泡和捕获

JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流 从页面中接收事件的顺序称为事件流. IE --> 事件冒泡流 Netscape --> 事件捕获流 查看源码:DOM2事件-捕获-冒泡 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 我们先来个简单的例子,这是HTML结构 <!DOCTYP

Js事件捕获和冒泡

昨天有个面试官问我的问题,他直接问我两个DIV嵌套,都有click事件,单击的时候先弹出子DIV还是父DIV.完全不知所以然. 过后经过查询资料后,很是惭愧.原来他问的就是关于JS捕获和冒泡的. 我查询了一些资料: 事件捕获(父--> 子) 当你使用事件捕获时,父级元素先触发,子级元素后触发,即div先触发,p后触发. 事件冒泡(子--> 父) 当你使用事件冒泡时,子级元素先触发,父级元素后触发,即p先触发,div后触发. W3C模型 W3C模型是将两者进行中和,在W3C模型中,任何事件发生时

js事件捕获和冒泡解析

<div id="box"> <div id="box2"> <p id="test">test</p> </div> </div> <script> document.getElementById('box').addEventListener('click',function () { console.log('box') },true) document.g

js中addEventListener第三个参数涉及到的事件捕获与冒泡

js中,我们可以给一个dom对象添加监听事件,函数就是 addEventListener("click",function(){},true); 很容易理解,第一个参数是事件类型,比如点击(click).触摸(touchstart), 第二个参数就是事件函数, 比如我给一个button添加alert函数. window.onload=function(){ document.getElementById("hello").addEventListener("

js事件冒泡和事件委托

js所谓的事件冒泡就是子级元素的某个事件被触发,它的上级元素的该事件也被递归执行 html: 1 <ul class="clearfix" data-type="cityPick"> 2 <li class="active_sort_opts" data-id="0">全部</li> 3 <li data-id="88">纽约</li> 4 <

JS事件(事件冒泡和事件捕获)

事件流:描述的是在页面中接收事件的顺序 事件冒泡:由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点(文档) 事件捕获:最不具体的节点先接收事件,而最具体的节点应该是最后接收事件 DOM中:用于处理指定和删除事件处理程序的操作addEventListener()和removeEventListener().他们都接收三个参数:要处理的事件名.作为事件处理程序的函数和布尔值(事件处理的时候)[true:事件捕获时;false:事件冒泡时] DOM中的事件对象: type属性 用于获取事件类

js 事件冒泡与事件捕获

一.事件冒泡 事件冒泡是指在事件发生过程中先从目标节点开始执行,并一层一层的相父节点依次查询直到document,并执行相同事件的过程. btn1.addEventListener('click',function(e){ //true 为事件捕获,false 为事件冒泡 //false为默认方式,冒泡方式执行 //点击btn1时,如果是事件冒泡,则先执行btn1上的click事件,然后执行父元素div1上的click事件 //如果是事件捕获,则先执行父元素上的click事件,然后执行btn1上

js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME)

网上有关这方面的代码比较多而乱,这里整理一下并加以改进. 添加事件 var addEvent = function( obj, type, fn ) { if (obj.addEventListener) obj.addEventListener( type, fn, false ); else if (obj.attachEvent) { obj["e"+type+fn] = fn; obj.attachEvent( "on"+type, function() {

js事件冒泡和捕捉

(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div -> body -> html -> document Mozilla 1.0: div -> body -> html -> document -> window (2)捕获型事件(event capturing):事件从最不精确的对象(document 对象)开