2

我在 div 中有一个元素,它有一个与之关联的点击事件。两个点击事件都可以正常工作,除了它们同时触发。

当我单击内部元素以禁用父 div 的单击事件时:

我的 html(在 @foreach MVC Razor 循环内):

<td class="tdfuncLangSignOff tdNotChecked tdLang@(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)
});

我从这个线程中找到了处理程序的想法

这使我可以单击 addComment div 并根据需要禁用对父 div 的单击。但是重新绑定显然不会发生。当我$(this).parent().click(handler)在 addComment 单击功能中取消注释时,单击触发并且控制台显示“父 div 单击”。

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

4

3 回答 3

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/

于 2011-08-08T23:53:59.517 回答
0

你可以试试:

$(this).parent().bind('click');
于 2011-08-08T23:51:13.963 回答
0

我怀疑原因是因为您正在重新绑定子单击事件中的单击处理程序,然后事件传播到下一个级别(其父级),该级别现在再次具有单击处理程序。

除非我遗漏了其他东西,否则 Naor 关于停止传播的建议应该可以达到您的目的。

于 2011-08-09T00:02:10.867 回答