百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

jQuery基础回顾——事件冒泡、移除事件、模拟事件

ztj100 2024-12-09 19:16 31 浏览 0 评论

事件冒泡

  • 什么是冒泡

在页面上可以有多个事件,也可以多个元素响应同一个事件,假设网页上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了click事件,同事<body>元素上也绑定了click事件,当单击内部<span>元素,即触发<span>元素的click事件,会输出3条记录,这就是由事件冒泡引起的。

在单击<span>元素的同时,也单击了包含<span>元素的元素<div>和包含<div>元素的<body>,并且每一个元素都会按照特定的顺序响应click事件。

  • 事件冒泡引发的问题

事件冒泡可能会引起意料之外的效果,上例中,本来只想触发<span>元素的click事件,然而<div>和<body>元素的click事件也同时被触发了,因此,有必要对事件的作用范围进行限制,当单击<span>时,只触发该元素的click事件,当单击<div>时,只触发<div>元素的click事件。

想要阻止事件冒泡,只需要在对应事件的响应函数里返回 false( return false;) 即可。

移除事件

在绑定事件的过程中,不仅可以为同一个元素绑定多个事件,也可以为多个元素绑定同一个事件,假设网页上有一个<button>元素,使用以下代码为该元素绑定多个相同的事件。

<script>
	$(function(){
		$("#btn").on("click",function(){
			$("#test").append("<p>我绑定的函数1</p>");
		}).on("click",function(){
			$("#test").append("<p>我绑定的函数2</p>");
		}).on("click",function(){
			$("#test").append("<p>我绑定的函数3</p>");
		});
	});
</script>
<button id="btn">单击我</button>
<div id="test"></div>

当单击按钮后,会出现下图所示的效果

1、移除按钮元素上以前注册的事件

首先在网页上添加一个移除事件的按钮。

<button id="delAll">删除所有事件</button>

然后为按钮绑定一个事件,jQuery代码如下:

$("#delAll").click(function(){
	$("#btn").off("click");
});

下面来看看off()方法的语法结构:

off(events, [selector], [fn])

events:一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如"click", "keydown.myPlugin", 或者 ".myPlugin".

selector:一个最初传递到.on()事件处理程序附加的选择器。

fn:事件处理程序函数以前附加事件上,或特殊值false.

具体说明如下:

1) 如果没有参数,则删除所有绑定的事件。

2) 如果提供了事件类型作为参数,则只删除该类型的绑定事件。

3) 如果把在绑定时传递的处理函数作为第2/3个参数,则只有这个特定的事件处理函数会被删除。

2、移除<button>元素的其中一个事件

首先需要为这些匿名处理函数指定一个变量,例如下面的jQuery代码:

$(function(){
	$("#btn").on("click",myFun1 = function(){
		$("#test").append("<p>我绑定的函数1</p>");
	}).on("click", myFun2 = function(){
		$("#test").append("<p>我绑定的函数2</p>");
	}).on("click", myFun3 = function(){
		$("#test").append("<p>我绑定的函数3</p>");
	});
});

然后就可以单独删除某一个事件了,jQuery代码如下:

$("#delTow").unbind("click", myFun2);

另外,对于只需要触发一次,随后就立即要解除绑定的情况,jQuery提供了一种简写法——one()方法,one()方法可以为元素绑定处理函数,当处理函数出发一次后立即被删除。其语法结构同on()方法类似,使用方法也相同

模拟操作

  • 常用模拟

以上的例子都是用户必须通过单击按钮才能触发click事件,但是有时,需要通过模拟用户操作来达到单击的效果,例如在用户进入页面后,就触发click事件,而不需要用户主动单击。

在jQuery中,可以使用trigger()方法完成模拟操作,例如可以使用下面的代码来触发id为btn的按钮的click事件:

$("#btn").trigger("click");

这样,当页面加载完毕后,就会立刻输出想要的效果,也可以直接用简化写法click(),来达到同样的效果。

$("#delTow").click();
  • 触发自定义事件

trigger()方法不仅能触发浏览器支持的具有相同名称的事件,也可以触发自定义名称的事件,此时传入的参数名为自定义事件的名。

  • 传递数据

trigger(type,[data])方法有两个参数,第1个参数是要触发事件的类型,第2个参数是要传递给事件处理函数的附加数据,以数组形式传递,通常可以通过传递一个参数给回调函数来区分这次事件是代码触发还是用户触发的:

$("#btn").on("myClick", function(event,msg1,msg2){//获取数据
	$("#test").append("<p>"+msg1 + msg2 +"</p>");
});
$("#btn").trigger("myClick",["我的自定义","事件"]);//传递两个数据
  • 执行默认操作

trigger()方法触发事件后,会执行浏览器默认操作。

$("input").trigger("focus");

以上代码不仅会触发<input>元素绑定的focus事件,也会使该元素本身得到焦点(这是浏览器的默认操作)。

如果只想触发绑定的focus事件,而不想执行浏览器默认操作,可以使用jQuery中另一个类似的方法——triggerHandler()方法。

$("input").triggerHandler("focus");

该方法只会触发<input>元素上绑定的特定事件,同时取消浏览器对此事件的默认操作,即文本框只触发绑定的focus事件,而不会得到焦点。

若感觉对您有用,可以关注并转发,您的关注是对我莫大的支持!

关注并转发后私信“jQuery基础材料”获取线下资料,包括完整基础资料、chm文档、示例代码及其他参考资料。

上一节:jQuery中的事件——事件绑定、合成事件

下一节:jQuery基础回顾——jQuery中的动画

相关推荐

再说圆的面积-蒙特卡洛(蒙特卡洛方法求圆周率的matlab程序)

在微积分-圆的面积和周长(1)介绍微积分方法求解圆的面积,本文使用蒙特卡洛方法求解圆面积。...

python编程:如何使用python代码绘制出哪些常见的机器学习图像?

专栏推荐...

python创建分类器小结(pytorch分类数据集创建)

简介:分类是指利用数据的特性将其分成若干类型的过程。监督学习分类器就是用带标记的训练数据建立一个模型,然后对未知数据进行分类。...

matplotlib——绘制散点图(matplotlib散点图颜色和图例)

绘制散点图不同条件(维度)之间的内在关联关系观察数据的离散聚合程度...

python实现实时绘制数据(python如何绘制)

方法一importmatplotlib.pyplotaspltimportnumpyasnpimporttimefrommathimport*plt.ion()#...

简单学Python——matplotlib库3——绘制散点图

前面我们学习了用matplotlib绘制折线图,今天我们学习绘制散点图。其实简单的散点图与折线图的语法基本相同,只是作图函数由plot()变成了scatter()。下面就绘制一个散点图:import...

数据分析-相关性分析可视化(相关性分析数据处理)

前面介绍了相关性分析的原理、流程和常用的皮尔逊相关系数和斯皮尔曼相关系数,具体可以参考...

免费Python机器学习课程一:线性回归算法

学习线性回归的概念并从头开始在python中开发完整的线性回归算法最基本的机器学习算法必须是具有单个变量的线性回归算法。如今,可用的高级机器学习算法,库和技术如此之多,以至于线性回归似乎并不重要。但是...

用Python进行机器学习(2)之逻辑回归

前面介绍了线性回归,本次介绍的是逻辑回归。逻辑回归虽然名字里面带有“回归”两个字,但是它是一种分类算法,通常用于解决二分类问题,比如某个邮件是否是广告邮件,比如某个评价是否为正向的评价。逻辑回归也可以...

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂

一、拟合和回归的区别拟合...

推荐2个十分好用的pandas数据探索分析神器

作者:俊欣来源:关于数据分析与可视化...

向量数据库:解锁大模型记忆的关键!选型指南+实战案例全解析

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

用Python进行机器学习(11)-主成分分析PCA

我们在机器学习中有时候需要处理很多个参数,但是这些参数有时候彼此之间是有着各种关系的,这个时候我们就会想:是否可以找到一种方式来降低参数的个数呢?这就是今天我们要介绍的主成分分析,英文是Princip...

神经网络基础深度解析:从感知机到反向传播

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

Python实现基于机器学习的RFM模型

CDA数据分析师出品作者:CDALevelⅠ持证人岗位:数据分析师行业:大数据...

取消回复欢迎 发表评论: