6.阻止事件冒泡

2016-10-14  本文已影响36人  素弥

来看一个简单的下拉框例子

<!--html代码-->
<body>
    <input type="text">
    <ul style="display:none;">    <!--为了节省空间这里采用了行内样式-->
        <li>下拉列表1</li>
        <li>下拉列表2</li>
        <li>下拉列表3</li>
        <li>下拉列表4</li>
        <li>下拉列表5</li>
    </ul>
</body>

分为如下几个步骤:

  1. 首先需要获取到三个元素
var input = document.querySelector('input');
var ul = document.querySelector('ul');
var lis = document.querySelectorAll('li');
  1. 一个下拉框在点击的时候,下拉列表需要显示
input.onclick=function(){
      ul.style.display='block';
};
  1. 当点击下拉列表里面的内容时,下拉框会消失,点击的内容会显示在下拉框内
for(var i=0;i<lis.length;i++){
      lis[i].onclick=function(){
          input.value=this.innerHTML;
          ul.style.display='none';
      };
};

以上步骤均正常运行,然后到了下一步

  1. 点击页面时,下拉列表也会消失
document.onclick=fucntion(){
      ul.style.display='none';
};

此时,由于在点击了input后,在事件冒泡的过程中,遇到了document的点击事件,并触发了它的事件处理函数,那么在页面上的表现结果就是下拉框无法显示了,这里我们就需要在点击input的时候阻止事件冒泡

input.onclick=function(ev){
      ul.style.display='block';
      ev.cancelBubble=true;
};

这么个功能就做好了

如果碰到事件冒泡时触发了其他事件处理函数,这时候只需要在触发事件的目标元素身上加上阻止事件冒泡的代码,就可以轻松的解决这个问题了
上一篇下一篇

猜你喜欢

热点阅读