jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法

yizhihongxing
  1. 事件冒泡和事件委托

在进行前端开发中,我们常常会遇到给一个或多个元素绑定事件的需求。而绑定事件的方式有两种,事件冒泡和事件委托。

事件冒泡:当一个元素触发事件时,它的父级元素也会收到该事件的触发消息,如果该父级元素也绑定了相同类型的事件,该事件同样会被触发。

示例代码:

<ul id="linkList">
  <li>百度</li>
  <li>谷歌</li>
  <li>必应</li>
</ul>

<script>
var linkList = document.getElementById('linkList');

// 给每个li绑定click事件
for (var i = 0, len = linkList.children.length; i < len; i++) {
  linkList.children[i].onclick = function(e) {
    console.log(this.innerHTML);
  }
}
</script>

通过上面的示例代码,我们给每个li绑定了click事件,但是在点击li元素时,ul元素也会收到该事件的触发消息,并且console.log会打印三次。

事件委托:将事件绑定到父级元素上,利用事件的冒泡原理,当子元素触发该事件时,该事件会一直冒泡到父级元素上,并且可以通过事件源对象判断具体是哪个子元素触发的该事件。通过这个方法,我们在动态添加或删除子元素时方便维护和使用。

示例代码:

<ul id="linkList">
  <li>百度</li>
  <li>谷歌</li>
  <li>必应</li>
</ul>

<script>
var linkList = document.getElementById('linkList');

linkList.addEventListener('click', function(e) {
  var target = e.target;
  if (target.tagName === 'LI') {
    console.log(target.innerHTML);
  }
});
</script>

通过上面的示例代码,我们将click事件绑定到了ul元素上,并且通过判断target元素的标签名,只在li元素上触发click事件。

  1. 阻止和允许事件冒泡的三种实现方法

通常来说,我们并不想让事件一直从子元素冒泡到父级元素,这时就需要用到下面三种实现方法。

(1)e.stopPropagation()

e.stopPropagation()用于停止事件在DOM树中的传播。当某个元素上触发了一个事件时,事件会传播到这个元素的父节点、祖先节点以及所有兄弟节点上,如果不希望该事件再继续传播,可以使用e.stopPropagation()

示例代码:

<ul id="linkList">
  <li>百度</li>
  <li>谷歌</li>
  <li>必应</li>
</ul>

<script>
var linkList = document.getElementById('linkList');

linkList.addEventListener('click', function(e) {
  var target = e.target;
  if (target.tagName === 'LI') {
    e.stopPropagation();
    console.log(target.innerHTML);
  }
});
</script>

通过在li元素上使用e.stopPropagation()来阻止事件继续向上冒泡,只在li元素上触发click事件。

(2)return false

return false用于防止事件的默认行为,同时也会停止事件的传播,即相当于同时使用了e.preventDefault()e.stopPropagation()

示例代码:

<ul id="linkList">
  <li>
    <a href="http://www.baidu.com">百度</a>
  </li>
  <li>
    <a href="http://www.google.com">谷歌</a>
  </li>
  <li>
    <a href="http://cn.bing.com">必应</a>
  </li>
</ul>

<script>
var linkList = document.getElementById('linkList');

linkList.addEventListener('click', function(e) {
  var target = e.target;
  if (target.tagName === 'A') {
    console.log(target.innerHTML);
    return false;
  }
});
</script>

通过在a元素上使用return false来防止事件的默认行为,同时也会停止事件的传播。

(3)stopImmediatePropagation()

stopImmediatePropagation()用于停止事件在DOM树中的传播,同时也会阻止后面所有其他处理函数的执行。

示例代码:

<ul id="linkList">
  <li>
    <a href="#">百度</a>
  </li>
  <li>
    <a href="#">谷歌</a>
  </li>
  <li>
    <a href="#">必应</a>
  </li>
</ul>

<script>
var linkList = document.getElementById('linkList');

linkList.addEventListener('click', function(e) {
  console.log('第一个处理函数');
  e.stopImmediatePropagation();
});

linkList.addEventListener('click', function(e) {
  console.log('第二个处理函数');
});
</script>

通过在第一个事件处理函数中使用stopImmediatePropagation()来阻止第二个事件处理函数的执行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Jquery中”$(document).ready(function(){ })”函数的使用详解

    Jquery中的$(document).ready函数用于在DOM文档加载完毕后执行JavaScript代码。通常在这个函数内部创建或操作DOM元素,绑定事件监听器,或执行其他页面初始化的操作。 $(document).ready函数用法示例: $(document).ready(function() { // 在这里编写需要在DOM加载后执行的代码 $(‘…

    jquery 2023年5月27日
    00
  • Jquery从头学起第四讲 jquery入门教程

    下面是基于Jquery从头学起第四讲的完整攻略: 简介 这一讲主要介绍了如何利用Jquery操作DOM。DOM(Document Object Model)即文档对象模型,是一种用于表示和操作HTML、XML等文档对象的标准模型。利用Jquery可以方便地选中DOM元素,并对其进行添加、删除、修改等操作。 选中DOM元素 在Jquery中,可以使用选择器选中…

    jquery 2023年5月28日
    00
  • jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】

    下面是 “jQuery实现的动态文字变化输出效果示例” 的完整攻略。 简介 “jQuery实现的动态文字变化输出效果示例” 是一个基于 jQuery 实现的动态文字变化效果示例。该示例通过使用 jQuery 动态改变文字,实现了不同颜色、不同字体大小、不同速度等多变的动态效果输出。在示例中,可以通过修改 js 代码中的参数来自定义文字内容、颜色、大小、速度等…

    jquery 2023年5月28日
    00
  • checkbox使用示例

    这里给您讲解一下”checkbox使用示例”的完整攻略,具体内容如下: 什么是checkbox checkbox 是表单中的一个输入框,一般用于选择多个选项或确认某个事项是否被选中,常用于用户设置、数据筛选等场合。 checkbox的基本语法 checkbox的语法非常简单,包含一个 input 标签和一个 label 标签,具体如下: <input …

    jquery 2023年5月29日
    00
  • jQuery 源代码显示控件 (Ajax加载方式).

    jQuery 源代码显示控件是一种可以在网页上显示 jQuery 源代码的工具。其中 Ajax 加载方式指的是通过 JavaScript 的 XMLHttpRequest 对象实现异步请求并获取 jQuery 源文件,然后在网页上显示出来。 以下是具体的步骤: 前置条件 首先需要在 HTML 页面中引入 jQuery 库,可以使用以下代码: <scri…

    jquery 2023年5月27日
    00
  • jQWidgets jqxTreeGrid的渲染属性

    以下是关于 jQWidgets jqxTreeGrid 组件中渲染属性的详细攻略。 jQWidgets jqxTreeGrid 渲染属性 jQWidgets jqxTreeGrid 组件提供了多个渲染属性,用于控制 TreeGrid 控件的外观和行为。是一些常用渲染属性: altRows:指定是否为 TreeGrid 控件的奇数行添加交替样式。 column…

    jquery 2023年5月12日
    00
  • jQWidgets jqxDateTimeInput关闭事件

    以下是关于“jQWidgets jqxDateTimeInput关闭事件”的完整攻略,包含两个示例说明: 简介 jqxDateTimeInput 控件的 close 事件在日期时间选择器关闭时触发。 完整攻略 以下是 jqxDateTimeInput 控件 close 事件的完整攻略。 定义 close 事件 在 jqxDateTimeInput 控件中,可…

    jquery 2023年5月11日
    00
  • jQWidgets jqxSlider rangeSlider 属性

    jQWidgets 是一个基于 jQuery 的 UI 组件库,其中包含了 jqxSlider 这个滑动条组件,可以进行单个值或范围值的选择。下面是该组件中 rangeSlider 属性的详细攻略。 rangeSlider 属性 rangeSlider 属性用于控制 jqxSlider 组件是否支持范围选择,其默认值为 false(即只能选择单个值)。 使用…

    jquery 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部