JQuery中的bind()和unbind()的理解

bind()和unbind()提供了事件的绑定和取消机制,既可以绑定html默认支持的事件,也能够绑定自定义的事件。

1、JQuery中事件可以重复绑定,不会覆盖。

1 $("#button1").bind("click",function(){
2     alert("func1");
3 });
4 $("#button1").bind("click",function(){
5     alert("func2");
6 });
1 $("#button1").bind("click",sameFunc);
2 $("#button1").bind("click",sameFunc);
3
4 function sameFunc()
5 {
6     alert("func");
7 } 

当点击button1的时候,这2个事件处理函数都会触发。上面绑定的是不同的匿名函数,占用不同的内存空间。就算是同一个处理函数,依然存在重复绑定问题。当button1被点击的时候,上面的事件处理函数同样会被调用2次。

2、使用bind一次绑定多个事件和处理函数。

如果多个事件需要注册相同的处理函数,那么可以使用如下代码进行简化(事件名称使用空格分隔):

1 $("#button1").bind("mousedown mouseup",function(){
2     console.log(11);
3 }); 

如果每个事件的处理函数不同,那么可以使用如下的方式(json对象):

 1 $("#button1").bind(
 2     {
 3         "mousedown":function(){
 4             console.log("mousedown");
 5         },
 6         "mouseup":function(){
 7             console.log("mouseup");
 8         }
 9     }
10 ); 

3、传递event对象和自定义参数

1 $("#button1").bind("click", {name:"aty"}, function(eventObject){
2     alert("params=" + eventObject.data.name);
3 }); 

eventObject很像IE和FF中的event对象,通过它能够获取事件发生时更详细的信息。如果我们指定了自定义的参数,那么JQuery会将它放在事件对象的data属性中,即通过eventObject.data就能够拿到我们传递的参数值。

4、事件取消的三种形式。

unbind用来取消之前通过bind绑定的事件处理函数,总的来说有三种形式:取消所有事件、取消某种类型的事件、取消某种类型下的某个事件处理函数。

 1 $("#button1").bind("click",func1);
 2 $("#button1").bind("click",func2);
 3
 4 // try to cancel function2
 5 $("#button1").unbind("click",func2);
 6
 7 function func1()
 8 {
 9     console.log("click1");
10 }
11
12 function func2()
13 {
14     console.log("click2");
15 } 

$("#button1").unbind():取消button1上所有已经绑定的事件处理函数。

$("#button1").unbind("click"):只取消button1上绑定的click类型的事件处理函数。

虽然bind和unbind是用的匿名函数功能是相同的,但是这2个函数不是同一个javascript对象,因为它们占用不同的内存空间。可以看到这种做法非常的不好,因为这种做法不允许使用匿名函数,我们不得不暴露全局的函数(至少要求unbind的时候能够看得见)。JQuery提供了事件命名空间机制

5、事件命名空间。

所谓事件命名空间,其实就是在事件类型后面以点语法附加一个别名,以便引用事件,如”click.a”,其中”a”就是click当前事件类型的别名,即事件命名空间。

1 $("#button1").bind("click.a",function(eventObj){
2     console.log("click1");
3 });
4 $("#button1").bind("click.b",function(eventObj){
5     console.log("click2");
6 });
7
8 // success to cancel function2
9 $("#button1").unbind("click.a");

可以看到:使用命名空间,能够以一种更优雅的方式取消某种事件类型下的某个事件处理函数。这里值得一提:使用了命名空间与unbind并不冲突,上面三种形式的unbind依然可以正常使用。$("#button1").unbind()依然可以取消button1上的所有事件,$("#button1").unbind("click")依然可以取消所有的click事件。

1 $("#button1").unbind("click.a");
2 $("#button1").unbind("mouseup");
3 $("#button1").unbind("mousedown");
4 $("#button1").unbind(".a");  

原文地址:https://www.cnblogs.com/missguolf/p/8185929.html

时间: 2024-10-29 04:03:16

JQuery中的bind()和unbind()的理解的相关文章

jQuery中的bind() live() delegate()之间区别分析

jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click',function (){ alert('click'); }) 解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上 2.live方式 $('a').live('click',function (){ alert('click'); }) 解析:jq将函数绑定到$

Jquery中的bind(),live(),delegate(),on()绑定事件方式 前言

前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能帮助到园友,文中如有不当之处,还望各位指正,话不多说,直接进入正题. bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器. 使用方式 $(selector).bind(event,data,function) event:必需项:添加到元素的一个或多个事件,例如 click,db

浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式

前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能帮助到园友,文中如有不当之处,还望各位指正,话不多说,直接进入正题. bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器. 使用方式 $(selector).bind(event,data,function) event:必需项:添加到元素的一个或多个事件,例如 click,db

关于jquery中的bind()、live()、delegate()的区别分析浅析

近来在研究JS的时候,小码哥又一次看到jquery中常见的几种绑定事件的方法:bind(),live(),delegate().因此,闲来无事,想把他们几个做一下系统的分析,一遍后面的码农们能够一起分享! 先说好,鄙人也算是JS的初学者,很复杂的模块啥的,也是略懂而已,要是有码神看到,可别Ma我哈!! 那好,下面就直接进入主题了~ 首先,分别介绍一下这三个方法: 1.bind()--$(selector).bind(event,data,function);     event 为必需,规定添加

【转】jQuery中的bind(),live(),delegate(),on()事件绑定方式的区别

bind()                                                                                                                                                                                                        简要描述 bind()向匹配元素添加一个或多个事件处理器. 使用方式 $(selecto

jQuery中的.bind()、.live()和.delegate()之间区别分析

DOM树   首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行. 复制代码 代码如下: $('a').bind('click',function(){alert('that tickles!')}) 因此一个单击操作会触发alert函数的执行. click事件接着会向树的根方向传播,广播到父元素,然后接着是每个祖先

jquery中的bind()、live()的区别与使用(事件处理)

使用jquery有一段时间了,刚开始看别人的源代码的时候对事件的绑定方法有疑惑.比如: var btn=$("#button"); btn.click(function(){ alert("I have been clicked!"); }); 这就绑定了一个click事件. 1.bind()方法解析 但后来发现jqueryAPI里面还有bind方法,一直没有使用过,查看API的使用方法: $("p").bind("click"

对jQuery中on方法委托事件的理解

关于on方法中的委托事件,官方JQ API如下: http://api.jquery.com/on/#on-events-selector-data-handler 参考大牛阮一峰的博文: http://www.ruanyifeng.com/blog/2011/08/jquery_best_practices.html 什么时候使用委托事件: 1.对未被创建的元素添加事件监听 2.避免频繁添加或删除event handler,委托父元素来进行事件处理 使用委托事件的优点: 1.大量减少监听元素的

Jquery中的bind(),live(),delegate(),on()绑定事件方式

bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器. 使用方式 $(selector).bind(event,data,function) event:必需项:添加到元素的一个或多个事件,例如 click,dblclick等: 单事件处理:例如 $(selector).bind("click",data,function); 多事件处理:1.利用空格分隔多事件,例如 $(selector).bind("click dbclick mouseout"