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

  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 Mobile Collapsibleset option()方法

    下面就是“jQuery Mobile Collapsibleset option()方法”的详细讲解: 概述 option()方法是用于设置或获取jQuery Mobile Collapsibleset插件选项的方法。 语法 $(selector).collapsibleset("option", optionName, [value])…

    jquery 2023年5月12日
    00
  • jQuery Mobile Column-Toggle Table创建事件

    下面我来详细讲解如何创建一个jQuery Mobile Column-Toggle Table的完整攻略。 什么是jQuery Mobile Column-Toggle Table jQuery Mobile是一款流行的JavaScript库,用于创建跨平台的移动Web应用程序。它提供了许多UI组件,包括Column-Toggle Table,用于在移动设备…

    jquery 2023年5月12日
    00
  • ASP.NET MVC引入JQUERY JQRTE控件

    这里是ASP.NET MVC引入JQUERY JQRTE控件的完整攻略: 1. 引入JQUERY JQRTE控件 步骤一:下载JQUERY JQRTE控件 首先下载JQUERY JQRTE控件,可以在其GitHub地址 https://github.com/lodev09/jQRTE 上获取源码,也可以在 https://lodev09.github.io/…

    jquery 2023年5月27日
    00
  • jQuery.Validate验证库的使用介绍

    jQuery.Validate是一款轻量级且强大的表单验证插件。它可以帮助我们简单方便地实现对表单字段的各种验证,支持实时验证、异步验证以及自定义规则等功能,极大地提高了表单验证的效率和便捷性。 安装 要使用jQuery.Validate,需要先在页面中引入jQuery库和jQuery.Validate插件库,可以通过以下方式在页面中引入: <scri…

    jquery 2023年5月27日
    00
  • jQWidgets jqxWindow展开事件

    下面为你详细讲解关于“jQWidgets jqxWindow展开事件”的完整攻略。 1. jQWidgets jqxWindow展开事件 在jQWidgets中,展开事件是指在窗口初始显示后,窗口大小进行更改从而达到显示窗体最大化时触发的事件。对于jqxWindow展开事件,可以使用.on()方法,其中方法中的”open”字符串表示窗口展开事件,如下所示: …

    jquery 2023年5月12日
    00
  • 在 Angular 中获取当前日期的方法

    Angular中获取当前日期的方法有以下几种方式: 1. DatePipe Angular提供了一个内置的pipe:DatePipe来处理日期。我们可以将DatePipe注入到组件中,然后使用它的transform方法来获取当前日期。 import { Component } from ‘@angular/core’; import { DatePipe }…

    jquery 2023年5月27日
    00
  • jQuery UI Accordion disable()方法

    以下是关于 jQuery UI Accordion disable() 方法的完整攻略: jQuery UI Accordion disable() 方法 在 jQuery UI Accordion 中,可以使用 disable() 方法禁用一个折叠面板。这将使折叠面板无法展开或折叠。 语法 $(selector).accordion("disab…

    jquery 2023年5月11日
    00
  • jQWidgets jqxTagCloud maxValueToDisplay属性

    jQWidgets 是一个非常流行的前端 UI 库,其中 jqxTagCloud 是其中的一个组件。jqxTagCloud 可以用于展示标签云效果。maxValueToDisplay 属性是这个组件中的一个重要属性,它可以用来控制显示的标签的数量。下面是对这个属性的详细讲解: 一、属性概述 maxValueToDisplay 是 jqxTagCloud 组件…

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