浅谈jquery之on()绑定事件和off()解除绑定事件


Posted in Javascript onOctober 26, 2016

off()函数用于移除元素上绑定的一个或多个事件的事件处理函数。

off()函数主要用于解除由on()函数绑定的事件处理函数。

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

语法

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

用法一:

jQueryObject.off( [ events [, selector ] [, handler ] ] )

用法二:

jQueryObject.off( eventsMap [, selector ] )

参数

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

off()函数将会移除当前匹配元素上为后代元素selector绑定的events事件的事件处理函数handler。

如果省略参数selector,则移除为任何元素绑定的事件处理函数。

参数selector必须与通过on()函数添加绑定时传入的选择器一致。

如果省略参数handler,则移除指定元素指定事件类型上绑定的所有事件处理函数。

如果省略了所有参数,则表示移除当前元素上为任何元素绑定的任何事件类型的任何事件处理函数。

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

实际上,off()函数的参数全是筛选条件,只有匹配所有参数条件的事件处理函数才会被移除。参数越多,限定条件就越多,被移除的范围就越小。

off()方法的代码示例:

容易忽略的点:off所解除元素的绑定事件,其中选择器必须和on绑定事件时所用的选择器一致。

html代码

<input id="btn1" type="button" value="点击1" />
 <input id="btn2" type="button" value="点击2" />
 <a id="a1" href="#">CodePlayer</a>

页面加载时执行的jquery代码

function btnClick1(){
  alert( this.value + "-1" );
}

function btnClick2(){
  alert( this.value + "-2" );
}

var $body = $("body");

// 给按钮1绑定点击
$body.on("click", "#btn1", btnClick1 );

// 给按钮2绑定点击
$body.on("click", "#btn2", btnClick2 );

//为所有a元素绑定click、mouseover、mouseleave事件
$body.on("click mouseover mouseleave", "a", function(event){
  if( event.type == "click" ){
    $body.off("click", "#btn1");//取消btn1的绑定事件。成功执行
    alert("点击事件");
    alert("ddd");
  }else if( event.type == "mouseover" ){
    $(this).css("color", "red");
  }else{
    $(this).css("color", "blue");
    
  }
});


// 移除body元素为所有button元素的click事件绑定的事件处理函数btnClick2
// 点击按钮,btnClick1照样执行
$body.off("click", ":button", btnClick2);


// 点击按钮1,不会执行任何事件处理函数
// $body.off("click", "#btn1");


// 注意: $body.off("click", ":button"); 无法移除btn1的点击事件,off()函数指定的选择器必须与on()函数传入的选择器一致。


// 移除body元素为所有元素(包括button和<a>元素)的click事件绑定的所有处理函数
// 点击按钮或链接,都不会触发执行任何事件处理函数
// $("body").off("click");


// 移除body元素为所有元素的任何事件绑定的所有处理函数
// 点击按钮,或点击链接或者鼠标移入/移出链接,都不会触发执行任何事件处理函数
// $("body").off( );

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

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

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

即使是执行on()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数也对其有效。

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

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

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

语法

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

用法一:

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

用法二:

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

参数

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

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

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

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

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

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

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

返回值

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

重要说明:

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

以上就是小编为大家带来的浅谈jquery之on()绑定事件和off()解除绑定事件全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
完整显示当前日期和时间的JS代码
Sep 17 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
Dec 12 Javascript
一个JavaScript递归实现反转数组字符串的实例
Oct 14 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
解决jQuery使用JSONP时产生的错误
Dec 02 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
纯JS代码实现隔行变色鼠标移入高亮
Nov 23 Javascript
React中jquery引用的实现方法
Sep 12 jQuery
node实现爬虫的几种简易方式
Aug 22 Javascript
js new Date()实例测试
Oct 31 Javascript
Javascript执行上下文顺序的深入讲解
Nov 04 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
Oct 26 #Javascript
Bootstrap 实现查询的完美方法
Oct 26 #Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
Oct 26 #Javascript
jquery延迟对象解析
Oct 26 #Javascript
关于Jquery中的bind(),on()绑定事件方式总结
Oct 26 #Javascript
JavaScript实现的微信二维码图片生成器的示例
Oct 26 #Javascript
关于JavaScript中事件绑定的方法总结
Oct 26 #Javascript
You might like
PHP开发文件系统实例讲解
2006/10/09 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
jupyter notebook 重装教程
2020/04/16 Python
浅析python中的del用法
2020/09/02 Python
Python用Jira库来操作Jira
2020/12/28 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
大学在校生求职信范文
2013/11/21 职场文书
职工宿舍管理制度
2015/08/05 职场文书