浅谈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调试说明
Jun 07 Javascript
使用jquery为table动态添加行的实现代码
Mar 30 Javascript
javascript类型转换使用方法
Feb 08 Javascript
js获取视频时长代码
Apr 10 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
浅谈使用MVC模式进行JavaScript程序开发
Nov 10 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
Sep 17 Javascript
微信小程序slider组件使用详解
Jan 31 Javascript
浅谈VUE监听窗口变化事件的问题
Feb 24 Javascript
深入浅析Vue中的Prop
Jun 10 Javascript
微信小程序的部署方法步骤
Sep 04 Javascript
javascript实现文字跑马灯效果
Jun 18 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
php中文字符截取防乱码
2008/03/28 PHP
程序员编程十条戒律
2009/07/09 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
JS 分号引起的一段调试问题
2009/06/18 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
pandas值替换方法
2018/07/10 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
python tkinter控件布局项目实例
2019/11/04 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
Python-for循环的内部机制
2020/06/12 Python
解决pip install psycopg2出错问题
2020/07/09 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
设计专业自荐信
2014/06/19 职场文书
青年文明号申报材料
2014/12/23 职场文书
初三毕业评语
2014/12/26 职场文书
音乐课外活动总结
2015/05/09 职场文书