jQuery中的die()与live()

什么是.live()?

函数的.live()类似.bind(),除此之外,它允许你绑定DOM元素现在和以后动态生成出来的dom节点,你可以绑定事件不存在的元素。

比方说,在点击链接时弹出一个提示消息:

$(document).ready( function() {  
	$('a').click( function() {  
		alert("hello");  
		return true;  
	});  
});


click只是实现一般的.bind()绑定点击事件,下面的代码相当于上面的实现:


$(document).ready(function() {  
	$('a').bind("click",function(){  
		alert("hello");  
		return true;  
	});  
});
现在动态的向页面中添加一个链接(a):
$('body').append('<div><a href="#">Check me!</a></div>');

当点击这个链接时,上面的click事件是没有被绑定的,因为在绑定的时候这个链接还不存在,这时候需要用live()绑定事件。

$(document).ready(function() {  
	$('a').live("click",function(){  
		alert("hello");  
		return true;  
	});  
});

这样你以后添加进来的链接都可以绑定点击事件。

.live()是如何工作的?

.live()实际上不是将你的事件绑定到element元素上面,而是将事件绑定到dom数的根节点上面($(document)),将你的元素选择器作为一个参数。

当你点击一个元素时,click事件就会在DOM树向上传递,直到达到根节点(document)。这个.click()事件的触发器已经在根节点被.live()创建。这个触发方法首先检测被点击的目标是否和live()调用的选择器($('a'))相匹配,如果匹配事件方法执行。

注意:不管你点击根节点内的任何元素,这个检查都会发生(绝对影响性能了)。

什么是.die()?

die()跟unbind()是类似的,用于接触live()绑定事件。当我们不希望用户点击提示的时候,可以这样做:

$('a').die();  //移除所有绑定的live事件。 
//具体点,如果还有其他的事件被绑定且需要保留,例如hover或其他,可以只解除click事件绑定。  
$('a').die('click');  
//再具体些,如果像下面似的已经定义了方法名,可以解除绑定指定的方法。  
var oneAlert = function() {  
	alert("hello one!");  
}   
$(document).ready( function() {  
	$('a').live( 'click', oneAlert );  
	$('a').live( 'click', someOtherFunction );  
});  
$('a').die( 'click', specialAlert );
关于.die()的问题~


.die()有一个缺点:解除事件绑定的时候,它只能使用.live()方法中绑定时用到的元素选择器,不能像下面这样:

$(document).ready(function() {  
	$('a').live("click",function(){  
		alert("hello");   
	});  
});  
$("a.alert").die(); //解除绑定

事实上$("a.alert")是不存在绑定的,所以jQuery找不到任何绑定事件去掉,所以die()不起作用。

还有就是下面这种多选择器的情况:


$(document).ready( function() {  
	$('a,form').live( 'click', function() {  
		alert("hello!");    
	});  
});  
//这两种方式不能解除绑定 
$('a').die();  
$('form').die();  
//只有这种方式才可以
$('a,form').die(); 


转载于:https://my.oschina.net/u/912681/blog/130967

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值