6.阻止事件冒泡

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

<!--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;
};

这么个功能就做好了

如果碰到事件冒泡时触发了其他事件处理函数,这时候只需要在触发事件的目标元素身上加上阻止事件冒泡的代码,就可以轻松的解决这个问题了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 事件对象 鼠标事件 event.clientX在可视区中,鼠标点击的x坐标 event.clientY在可视区中,...
    LaBaby_阅读 3,696评论 0 1
  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 5,907评论 0 1
  • 1.dom对象的innerText和innerHTML有什么区别? innerText是一个可写属性。将写入的内容...
    candy252324阅读 3,596评论 0 0
  • webstorm强大的功能就不多做介绍了。但是它的缺点也显而易见:吃内存。 电脑配置稍低一点,运行webstorm...
    呦_小宋啊阅读 10,106评论 2 4
  • 史蒂夫深吸一口气,心中也有一些疑惑,难道这个地方,就是为了杀戮而存在的。史蒂夫的眼前,凭空出现了倒数的三二一,游戏...
    蓦然回首哪人巳茬阅读 3,907评论 2 4

友情链接更多精彩内容