4

我有一个 id 的 div registerModal。我想禁用 div 中的所有“点击”事件。例如,我有以下内容:

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

</a>

以及以下内容:

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

});

我试着做:

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

但这没有成功。还有其他方法可以禁用对子元素 div 的所有点击吗?

4

3 回答 3

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");

同样,选择应针对实际所需的元素。

于 2013-10-14T03:10:25.353 回答
0

尝试

$('#registerModal').find('*').addBack().off('click',);
于 2013-10-14T03:00:48.297 回答
0

为了设置每一个并验证,我总是循环进行。如下所示:

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

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

所有答案在实用上都是正确的,但我倾向于注意到使用 $.each 处理多个事件的行为更稳定。

于 2013-10-14T03:48:07.920 回答