2011-03-05 37 views
1

我的代码是HTML类似以下内容:如何使用event.stopPropagation()的委托()

<li class="arrow">  
    <div> 
     <a href="javascript:void(0);" class="anchor">remove</a> 
    </div>      
</li> 

我使用deligate()jQuery的方法,结合我的元素(因为元素动态显示)

$obj.delegate(".arrow", "click", function() { 
    alert("clicked on arrow"); 
}); 

$obj.delegate(".anchor", "click", function(event) { 
    event.stopPropagation(); 
    alert("anchor clicked"); 
}); 

我的问题是,当我点击“.anchor”时,发生两个事件。任何人都可以告诉我如何在这种情况下使用event.stopPropagation()?我尝试像上述但不工作。有没有其他方法可以做到这一点?

编辑:我试着调用event.isPropagationStopped(),它返回true。但两个事件仍然被称为。

+0

哪个版本您使用的? – Zimbabao 2011-03-05 10:08:23

+0

http://stackoverflow.com/questions/1522941/event-propagation-in-javascript – Andreas 2011-03-05 10:09:55

回答

4

当使用delegatelivestopPropagation时有限制。

将返回false在你处理程序,以防止双方eventPropagationdefault

尝试

$obj.delegate(".anchor", "click", function(event) { 
    alert("anchor clicked"); 
    return false; 
}); 
+0

伟大的..它的工作原理,谢谢:) – Bhupi 2011-03-05 10:19:18

+0

哇,发生了很多事情发生在4分钟,它写了我的答案:) - 是否有任何理由在代码中离开.stopPropagation()?我不相信它在这方面做任何事情 – lnrbob 2011-03-05 10:21:37

+0

没理由。我刚刚复制了该部分。我错误地把它留在那里。 – Zimbabao 2011-03-05 10:24:44

1

我的理解是,随着.delegate.live你需要return false。我相信这是因为事件是如何附加的 - 不是元素,而是它的祖先。

下面是一个例子: http://jsfiddle.net/G3k8Z/