如何理解jQuery.on()函数

news/2024/7/10 23:26:04 标签: jquery

on()函数用于为指定元素的一个或多个事件绑定事件处理函数。

此外,你还可以额外传递给事件处理函数一些所需的数据。

从jQuery 1.7开始,on()函数提供了绑定事件处理程序所需的所有功能,用于统一取代以前的bind()、 delegate()、 live()等事件函数。

on()支持直接在目标元素上绑定事件,也支持在目标元素的祖辈元素上委托绑定。在事件委托绑定模式下,即使是执行on()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数也对其有效。

此外,该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。

要删除通过on()绑定的事件,请使用off()函数。如果要附加一个事件,只执行一次,然后删除自己,请使用one()函数。

该函数属于jQuery对象(实例)。

语法

jQuery 1.7 新增该函数。其主要有以下两种形式的用法:

用法一:

jQueryObject.on( events [, selector ] [, data ], handler )

$(document).on( 'click', '#myBtn', function(){//data参数可以省略
	alert('点击事件')
})

用法二:

jQueryObject.on( eventsMap [, selector ] [, data ] )

参数

参数描述
eventsString类型一个或多个用空格分隔的事件类型和可选的命名空间,例如"click"、“focus click”、“keydown.myPlugin”。
eventsMapObject类型一个Object对象,其每个属性对应事件类型和可选的命名空间(参数events),属性值对应绑定的事件处理函数(参数handler)。
selector可选/String类型一个jQuery选择器,用于指定哪些后代元素可以触发绑定的事件。如果该参数为null或被省略,则表示当前元素自身绑定事件(实际触发者也可能是后代元素,只要事件流能到达当前元素即可)。
data可选/任意类型触发事件时,需要通过event.data传递给事件处理函数的任意数据。
handlerFunction类型指定的事件处理函数。

关于参数events中可选的命名空间,请参考最下面的示例代码。

关于参数selector,你可以简单地理解为:如果该参数等于null或被省略,则为当前匹配元素绑定事件;否则就是为当前匹配元素的后代元素中符合selector选择器的元素绑定事件。

参数handler中的this指向当前匹配元素的后代元素中触发该事件的DOM元素。如果参数selector等于null或被省略,则this指向当前匹配元素(也就是该元素)。

on()还会为handler传入一个参数:表示当前事件的Event对象。

参数handler的返回值与DOM原生事件的处理函数返回值作用一致。例如"submit"(表单提交)事件的事件处理函数返回false,可以阻止表单的提交。

如果事件处理函数handler仅仅只为返回false值,可以直接将handler设为false。

返回值
on()函数的返回值为jQuery类型,返回当前jQuery对象本身。

重要说明
如果传递了selector参数,那么on()函数并不是为当前jQuery对象匹配的元素绑定事件处理函数,而是为它们的后代元素中符合选择器selector参数的元素绑定事件处理函数。on()函数并不是直接为这些后代元素挨个绑定事件,而是委托给当前jQuery对象的匹配元素来处理。由于DOM 2级的事件流机制,当后代元素selector触发事件时,该事件会在事件冒泡中传递给其所有的祖辈元素,当事件流传递到当前匹配元素时,jQuery会判断是哪个后代元素触发了事件,如果该元素符合选择器selector,jQuery就会捕获该事件,从而执行绑定的事件处理函数。

通俗易懂地说,如果我们希望给页面上所有的

标签绑定click事件处理函数,我们可以在每个P标签上直接分别绑定click事件处理函数。例如:

// 为所有P元素分别绑定click事件处理函数handler
$("p").on("click", handler);

我们也可以在这些P标签的任意一个公共祖辈元素上绑定事件委托机制,利用DOM的事件冒泡机制来统一委托处理。当我们触发了某个元素的click事件,JS会依次通知该元素及其"父辈"元素、"爷爷辈"元素……直到最顶部的document对象为止,如果这些元素上绑定了click事件处理函数就会依次执行。

// 在body元素上绑定click事件处理函数handler,如果这个click事件是由其后代的P元素触发的,就执行handler
$(document.body).on("click", "p", handler);

在这里的示例中,事件委托机制就是,我们不为每个P元素直接绑定click事件处理函数,而是委托给其某个公共的祖辈元素(此处示例中为document.body),"告诉"他:如果接收到了click事件触发通知,并且这个click事件是由我们这些P元素其中之一触发的,就执行祖辈元素上委托绑定的事件处理函数。

注意:“focus”、“blur"等部分事件不支持冒泡,使用事件委托机制将无效。不过,他们一般也有对应的支持冒泡的事件。例如与"focus"对应的"focusin”,与"blur"对应的"focusout"。此外,我们也可以使用event.stopPropagation()方法,让当前触发的事件停止冒泡。


http://www.niftyadmin.cn/n/1623618.html

相关文章

炸微信群代码大全_最新版格力空调故障代码赶紧收藏电工技术知识学习干货分享...

点击上方↑↑↑↑『电工技术知识学习』关注本公众号可以免费进微信群咨询技术问题E1:压缩机高压保护 微信搜索dgjsxx关注电工◎ 冷凝器前有障碍物◎室外环境温度高于43度时开始制冷◎控制回路异常◎ 高压管压力过大使高压开关动作E2:蒸发器防冻结保护◎ 室内风机不转或风口堵住…

Snap自IPO以来首个大动作:引入机器学习 搜索更容易

“阅后即焚”照片分享应用Snapchat希望你浏览更多的Stories,所以它准备让这些故事变得更容易被发现。 周五,它在一些美国城市推出了Stories搜索功能Stories in Search。用户可以在它早在1月就在其主页上推出的搜索框内进行搜索。 例如,如果你…

androidstuio实现页面跳转_单页面模式

一个问题Vue项目在本地运行时正常,部署到nginx上刷新页面,页面白板打开控制台f12打开控制台后,发现报红了,通过度娘搜索,说是js的问题但是检查源码之后发现并没有错查看目录结构打开vue项目打包后的目录,发…

python星空画法教程_R 语言中桑基图的一些画法。。。

❝欢迎收看今晚 8:30 针对本文的直播讲解!❞我的直播间地址为:https://live.bilibili.com/21748016「欢迎大家加入我的知识星球获取更多教程!关于如何加入,请阅读:欢迎加入 TidyFriday 的知识星球!」知识星球上有个小伙…

python里的df_字符串包含在python中的两个df之间

我有两个df和两个字符串列,如下所示:df1:原始df有2000行名称Id Name1 Paper2 Paper3 Scissors4 Mat5 Cat6 Cat第二个df:原始df有1000项\名称Item_ID Item_Name1 Paper Bag2 wallpaper3 paper4 cat cage我需要列中的字符串Name列中的那个项目名称第一种方法:使用str.contains:我…

Object.defineProperty()方法详解

文章目录Object.defineProperty()参数描述创建属性修改属性Enumerable 特性Configurable 特性添加多个属性和默认值Setters 和 GettersObject.defineProperty() Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性&#xff0…

阿里云域名备案之如何填写真实性核验单

在网络高速发展的今天,网站建设更加的有冲击力量,在网站建设的首要工作,就是选好域名,并按照工信部要求,进行备案,如果选用在阿里云购买的域名,进行备案的时候,要求填写“网站备案信…

下列哪个可以选中矩形文字块_两种方法,让PPT文字极具立体感

Miss Zhu:Hi,雄狮。看了你上一期的PPT推文,我觉得第二种方法很有立体感欸!!(戳我直达:渐隐文字)雄狮:喜欢就动动手,多练练就成了自己的知识了。Miss Zhu:嗯嗯&#xff0c…