2011-08-08 102 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