JavaScript学习—jquery的bind-live-delegate区别

转自:http://blog.csdn.net/barrettoshen/article/details/7692307

一、 事件冒泡(也称作事件传递)

点击一个链接,触发绑定在链接元素上的click事件,触发绑定到这个元素的click事件的函数。然后,这个 click 事件会从DOM树向上传递,传播到父元素,然后传递给每一个祖先元素。在DOM树中,document 是根节点。


二、 Jquery的.bind()函数

$('a').bind('click',function() { alert("That tickles!") });

JQuery的CSS选择器找到所有元素类型是‘a’的DOM对象,然后给匹配对象的 click 事件绑定处理函数。

$('a').unbind('click');

解除click事件绑定的函数。

.bind()函数使用缺陷:

1. 无法绑定处理函数到还不存在DOM元素的事件。使用$(‘a’).bind(…),之后JavaScript脚本给页面新增DOM元素,新添加元素click事件不会绑定处理函数。

2. .bind()绑定处理函数到多个元素,性能不佳,需要每个元素单独绑定。无法绑定一个父元素监听所有后代(子)元素(不用绑定100个相同的处理函数到单独的元素)。

三、 Jquery的.live()函数

$('a').live('click',function() { alert("That tickles!") });

.live()函数绑定处理函数到$(document)元素(DOM的根元素),并把事件‘click’和元素类型‘a’作为函数的参数。若有事件冒泡到document节点的时候,检查这个事件是不是 click 事件,目标元素能不能匹配‘a’,如果两个条件都是真,处理函数执行。

四、 Jquery的.delegate()函数

$('#container').delegate('a','click',function() { alert("That tickles!") });

JQuery的CSS选择器找到ID=container的对象,绑定处理函数到他的click 事件,事件‘click’和元素类型‘a’作为函数的参数。若有事件冒泡到 $(‘#container’)对象,检查事件是不是click,目标元素是不是类型为a,如果两者都符合,执行函数。

举例:

$('a').live('click',function() { blah() });

$(document).delegate('a','click',function() { blah() });

第二个方法执行效率高于第一个,因为第一个方法需要遍历整个文档($(document)元素)查找$('a')对象,并保存为jQuery对象。第二个方法只需要存贮$(document)元素,这样不需要完全载入DOM元素,就能执行后面的处理函数。

举例:


[javascript] view plain copy print ?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript">
  7. $(document).ready(function(){
  8. $("div").delegate("p","click",function(){
  9. $(this).slideToggle();});
  10. $("button").click(function(){
  11. $("<p>这是一个新段落。</p>").insertAfter("button");});
  12. });
  13. </script>
  14. </head>
  15. <body>
  16. <div style="background-color:yellow">
  17. <p>这是一个段落。</p>
  18. <p>请点击任意一个p元素,它会消失。</p>
  19. <button>在本按钮后面插入一个新的p元素</button>
  20. </div>
  21. </body>
  22. </html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值