浅谈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 相关文章推荐
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
JS使用getComputedStyle()方法获取CSS属性值
Apr 23 Javascript
jQuery中:image选择器用法实例
Jan 03 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
关于JavaScript限制字数的输入框的那些事
Aug 14 Javascript
Vue过滤器的用法和自定义过滤器使用
Feb 08 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 Javascript
JS中常用的消息框总结
Feb 24 Javascript
electron + vue项目实现打印小票功能及实现代码
Nov 25 Javascript
element-ui 文件上传修改文件名的方法示例
Nov 05 Javascript
vue.config.js常用配置详解
Nov 14 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 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编译安装时常见错误解决办法
2015/05/28 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
python类装饰器用法实例
2015/06/04 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
你们项目是如何进行变更控制的
2015/08/26 面试题
教师的实习自我鉴定
2013/12/17 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
上课说话检讨书大全
2014/01/22 职场文书
财务会计自荐信范文
2014/02/21 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
课外科技活动总结
2014/08/27 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
同意转租证明
2015/06/24 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers