2013-10-14 44 views
4

我有一個ID爲registerModal的div。我想禁用div內的所有'click'事件。例如,我有以下幾點:如何禁用所有onClick子元素上的點擊

<a id="instagram-login-btn" class="inst-btn" href=""> 

</a> 

及以下:

$('#instagram-login-btn').on('click', function (event) { 

}); 

我試圖做:

$('#registerModal').off('click', '**'); 

但沒有成功。任何其他方式來禁用所有點擊子元素的div?

+0

可能的重複[如何使用JQuery刪除父元素的子元素的所有事件處理程序](http://stackoverflow.com/questions/12012882/how-to-remove-all-event-handlers-for- child-elements-of-a-parent-element-using-jq) – j08691

回答

4

使用事件代表團。

var modal = $('#registerModal'); 

modal.on('click', "#instagram-login-btn:not(.disabled)", function(event) { 
    // the handler 
}); 
modal.on("click", "#another_element:not(.disabled)", function(event) { 
    // the handler 
}); 

然後要禁用它們,請添加disabled類。

$("#registerModal *").addClass("disabled"); 

並刪除類以啓用。

$("#registerModal *").removeClass("disabled"); 

這些添加/刪除所有嵌套元素的類,但您的實際代碼可以更有針對性。


另一種不使用類的方法是綁定阻止事件傳播到嵌套元素的處理程序。

var modal = $('#registerModal'); 

modal.on('click', "#instagram-login-btn", function(event) { 
    // the handler 
}); 
modal.on("click", "#another_element", function(event) { 
    // the handler 
}); 

然後禁用它們,停止冒泡與控制器

$("#registerModal *").on("click", function(event) { event.stopPropagation() }); 

和刪除處理程序啓用。

$("#registerModal *").off("click"); 

此外,選擇應該針對實際需要的元素。

+0

我也想提一提,我喜歡這個想法。我們在處理程序中使用了很多代表團。所以,乾淨的方式,因爲對於這種情況,你也可以使用類的類改變類切換,然後有一個回調綁定等..... – Casey

0

嘗試這是一類存在禁用

$('#registerModal').find('*').addBack().off('click',); 
+0

以及我如何重新開啓一切? – adit

+0

@adit在這種情況下,你不能再打開它....你需要再次註冊所有的事件處理程序 –

+0

好..那不是我想要的然後 – adit

0

要設置每一個,並驗證,我總是做一個循環。比如下面:

$('#registerModal').find("*").each(function(i,e) 
    { 

     $(this).unbind("click"); 
    }); 

所有的答案都正確務實,但我傾向於注意到有多個事件中使用$。每次它處理更穩定的表現。

相關問題