jQuery 控件事件的绑定和取消操作

jQuery的绑定事件非常方便,有bind、live、one还有它帮你把一些常用的事件给单独了出来,比如控件的onclick事件,我们绑定onclick事件的时候只需要

 
 
  1. $("#testButton").click(function() {  
  2.     alert("I'm Test Button");  
  3. }); 

就这样我们在testButton这个按钮上绑定了onclick事件,执行alert语句。我们也可以使用$("#testButton").click();来触发这个onclick事件,一切都非常ok啦。以上有点sb了,接下来看看取消事件。jQuery有unbind的方法,专门来取消绑定的,也就是取消事件,按照上面的例子的话,应该使用:$("#testButton").unbind("click");恩,看上去非常好,如果你的click有2个事件的话,你还可以使用unbind("click", fnName)来删除特定函数的绑定。为什么有这个取消特定函数的方法呢,我们来看下例子,我们会发现,javascript的事件,跟C#的事件如出一辙,事件的绑定是叠加(+=) 而不是覆盖。   

 
 
  1. var Eat = function() {  
  2.         alert("我要吃饭");  
  3.     }  
  4.  
  5.     var PayMoney = function() {  
  6.         alert("先付钱");  
  7.     }  
  8.  
  9.     jQuery(document).ready(function() {  
  10.         $("#testButton").click(Eat);  
  11.         $("#testButton").bind("click", PayMoney);  
  12.     }); 

通过上面的例子,我们发现会先弹出:“我要吃饭”紧接着会弹出“先付钱”,说明它的绑定是通过onclick+=fn进行的。我们修改下ready的方法:       

 
 
  1. jQuery(document).ready(function() {  
  2.            $("#testButton").click(Eat);  
  3.            $("#testButton").unbind();  
  4.            $("#testButton").bind("click", PayMoney);  
  5.        }); 

又出错了,呵呵,这次点击按钮的话,只会执行PayMoney,不会执行Eat,那如果把unbind()放在bind后面的话,这样这个按钮就不会起作用了。但如果我要去掉绑定的PayMoney方法呢?这时候我们应该这样写:      

 
 
  1. jQuery(document).ready(function() {  
  2.           $("#testButton").click(Eat);  
  3.           $("#testButton").bind("click", PayMoney);  
  4.           $("#testButton").unbind("click", PayMoney);  
  5.       }); 

嘿嘿,跟bind其实一个样,不过接下来你将看到一个bug(我不知道算不算),让我们近距离体验一下

 
 
  1. <input id="testButton" type="button" value="Test Button" onclick="Eat();" /> 
  2. <script type="text/javascript"> 
  3.         jQuery(document).ready(function() {  
  4.             $("#testButton").unbind("click", Eat);  
  5.             $("#testButton").unbind();  
  6.             $("#testButton").bind("click", PayMoney);  
  7.         });  
  8. </script> 

大家猜猜,会显示什么?吃饭?付钱?答案是Eat -> PayMoney,啊!!!我这里取消了绑定,又删除了特定的绑定,为什么还会执行Eat呢?其中的原由要看jQuery的类库了,我估计它只删除了通过JQuery绑定的那些事件了,呵呵。那这时候我们该如何呢?好在jQuery有很多方法,其中一个就是attr,他是对Dom元素的属性进行操作,我们利用attr来消除input上的click事件。    $("#testButton").attr("onclick", "");这样就可以把onclick事件清除了,记住,attr上因为是元素的属性,所以这里要写 “onclick” 而不是click,因为click是jQuery封装好的简写方式。好了,绑定就到这里了,弄个场景,大家也好记得住点:一日,老应、老赵、老陈出去吃饭,吃饱了,喝足了,准备付钱了,这时候

 
 
  1. <head> 
  2.  
  3.     <script type="text/javascript" src="jquery-1.2.6.min.js"></script> 
  4.  
  5.     <script type="text/javascript"> 
  6.  
  7.         var PayMoney = function(name) {  
  8.             alert(name + ":今天我请客,我来付钱");  
  9.         }  
  10.  
  11.         jQuery(document).ready(function() {  
  12.             $("#JeffreyPay").attr("onclick", "");  
  13.             $("#JamesPay").attr("onclick", "");  
  14.  
  15.             $("#JeffreyPay").click(function() {  
  16.                 alert("。。。。这里不能刷卡");  
  17.             });  
  18.  
  19.             $("#JeffreyPay").click(function() {  
  20.                 PayMoney("陈大");  
  21.             });  
  22.             $("#JamesPay").bind("click", function() {  
  23.                 alert("。。。。忘记带钱包了");  
  24.             });  
  25.             $("#JamesPay").bind("click", $("#DlyingPay").attr("onclick"));  
  26.         });  
  27.     </script> 
  28.  
  29. </head> 
  30. <body> 
  31.     <input id="JeffreyPay" onclick="PayMoney('赵帅');" type="button" value="老赵付钱" /> 
  32.     <input id="JamesPay" type="button" onclick="PayMoney('老应');" value="老应付钱" /> 
  33.     <input id="DlyingPay" type="button" onclick="PayMoney('陈大');" value="老陈付钱" /> 
  34. </body> 

以上内容均为原创,不要用在邪恶的地方哦。其实在绑定事件上还存在很多bug,大家可以稍微修改下上面的效果就会知道了,比如自动执行,绑定失败等,呵呵。


bind() 向匹配元素附加一个或更多事件处理器
blur() 触发、或将函数绑定到指定元素的 blur 事件
change() 触发、或将函数绑定到指定元素的 change 事件
click() 触发、或将函数绑定到指定元素的 click 事件
dblclick() 触发、或将函数绑定到指定元素的 double click 事件
delegate() 向匹配元素的当前或未来的子元素附加一个或多个事件处理器
die() 移除所有通过 live() 函数添加的事件处理程序。
error() 触发、或将函数绑定到指定元素的 error 事件
event.isDefaultPrevented() 返回 event 对象上是否调用了 event.preventDefault()。
event.pageX 相对于文档左边缘的鼠标位置。
event.pageY 相对于文档上边缘的鼠标位置。
event.preventDefault() 阻止事件的默认动作。
event.result 包含由被指定事件触发的事件处理器返回的最后一个值。
event.target 触发该事件的 DOM 元素。
event.timeStamp 该属性返回从 1970 年 1 月 1 日到事件发生时的毫秒数。
event.type 描述事件的类型。
event.which 指示按了哪个键或按钮。
focus() 触发、或将函数绑定到指定元素的 focus 事件
keydown() 触发、或将函数绑定到指定元素的 key down 事件
keypress() 触发、或将函数绑定到指定元素的 key press 事件
keyup() 触发、或将函数绑定到指定元素的 key up 事件
live() 为当前或未来的匹配元素添加一个或多个事件处理器
load() 触发、或将函数绑定到指定元素的 load 事件
mousedown() 触发、或将函数绑定到指定元素的 mouse down 事件
mouseenter() 触发、或将函数绑定到指定元素的 mouse enter 事件
mouseleave() 触发、或将函数绑定到指定元素的 mouse leave 事件
mousemove() 触发、或将函数绑定到指定元素的 mouse move 事件
mouseout() 触发、或将函数绑定到指定元素的 mouse out 事件
mouseover() 触发、或将函数绑定到指定元素的 mouse over 事件
mouseup() 触发、或将函数绑定到指定元素的 mouse up 事件
one() 向匹配元素添加事件处理器。每个元素只能触发一次该处理器。
ready() 文档就绪事件(当 HTML 文档就绪可用时)
resize() 触发、或将函数绑定到指定元素的 resize 事件
scroll() 触发、或将函数绑定到指定元素的 scroll 事件
select() 触发、或将函数绑定到指定元素的 select 事件
submit() 触发、或将函数绑定到指定元素的 submit 事件
toggle() 绑定两个或多个事件处理器函数,当发生轮流的 click 事件时执行。
trigger() 所有匹配元素的指定事件
triggerHandler() 第一个被匹配元素的指定事件
unbind() 从匹配元素移除一个被添加的事件处理器
undelegate() 从匹配元素移除一个被添加的事件处理器,现在或将来
unload() 触发、或将函数绑定到指定元素的 unload 事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值