2011-08-08 41 views
2

我有一个div内有一个与它关联的点击事件的元素。两个点击事件都能正常工作,除非它们同时触发。解除绑定后的jquery rebind点击

当我在内部元件上单击要禁用父div的单击事件:

我的HTML(一@foreach MVC剃刀循环内):

<td class="tdfuncLangSignOff tdNotChecked [email protected](item.Language.Name)" title="@(item.SignedOffStatus)"> 
    <div class="addComment"></div> 
    @Html.Hidden("funcSignOffId", item.Id) 
</td> 

我的jQuery:

var handler = function() { 
    var thisTD = $(this); 
    var signOffId = thisTD.parent().children("input#funcSignOffId").val(); 
    console.log("parent div click"); 
} 

    $(".tdfuncLangSignOff").click(handler); 

$(".addComment").click(function() { 
    $(this).parent().unbind("click") 
    console.log("nested div click"); 
    //$(this).parent().click(handler) 
}); 

我发现处理者想法从this thread

这允许我点击addComment div并禁用父按钮的点击,因为我想要的。但重新绑定显然不会发生。当我在addComment点击函数中取消注释$(this).parent().click(handler)时,点击触发器和控制台显示“父div点击”。

如何重新绑定父div的点击而不立即触发?

回答

5

如果我理解你正确: 为了阻止事件的传播,使用event.stopPropagation()。

例如:

<div id="a"> 
    Outer 
    <div id="b">Inner</div> 
<div> 

和JQuery的:

$("#a").click(function(event) {alert("a");}); 
$("#b").click(function(event) {alert("b"); event.stopPropagation();}); 

你可以在这里阅读更多: http://api.jquery.com/event.stopPropagation/

+0

Doh ...我已经使用stopPropagation在许多其他功能,有一个“活”的事件,甚至没有想到在这里使用它。谢谢你的工作! – LanFeusT

+0

@LanFeusT:很高兴帮助。 – Naor

0

你可以试试:

$(this).parent().bind('click'); 
+0

这是行不通的。当你解除绑定时,你会失去在元素上设置的所有内容。这就是为什么我有'点击(处理程序)' – LanFeusT

0

我怀疑的原因是因为你重新绑定在单击处理程序子点击事件,然后事件传播到下一级(它的父级),现在又有了点击处理程序。

除非我错过别的东西,否则Naor建议停止传播应该可以达到您的目的。

+0

是的,这使得诀窍:)虽然我不认为这个事件会在解绑和重新绑定之后传播。 – LanFeusT