jQuery live方法:无法阻止事件冒泡DOM

时间:2011-09-18 13:04:25

标签: jquery

我不确定,但这似乎是一个错误。

以下是样本:

http://jsfiddle.net/QNrZu/

也许我做错了什么? 对此有何解决方案?

谢谢;)

2 个答案:

答案 0 :(得分:4)

您是否阅读过documentation

  

由于.live()方法在事件传播到文档顶部后处理事件,因此无法停止传播实时事件。

.live() [docs]将事件处理程序绑定到文档根目录。您甚至可以按照日志的顺序看到这一点:

this should't be triggered
clicked

div的事件处理程序在 a元素的实时处理程序之前执行

如果必须使用.live(),那么解决此问题的唯一方法是将事件处理程序的事件绑定到div .live() }:

$('div').live('click', function(){
    console.log("this should't be triggered");
});

DEMO

如果您不必使用.live(),则只需使用.click() [docs].bind() [docs]以正常方式将处理程序绑定到a元素。

答案 1 :(得分:0)

使用bind代替live,live必须满足动态添加的元素,因此无法停止事件冒泡

   $('div').click(function(){
        alert('will not be triggered');
    });

    $('a').bind('click',function(e){
        console.log('clicked');   
        e.stopPropagation();
        alert("first");
        alert("second");    
    });

这里是小提琴http://jsfiddle.net/QNrZu/3/