使用不同的选择器从文档中取消绑定事件

Unbind an event from Document with a different seletor

我的应用中有以下全局点击行为

$(document).on("click", ".btnSubmit", function (e) {
    e.preventDefault();
    $(this).parents("form").submit();
});

现在我有一个一次性实例,我需要在模态 window 上使用 .btnSubmit 按钮来实现不同的行为。我有两个解决方法

  1. 使用不同的 class
  2. 向按钮添加数据属性并向我上面的绑定添加条件

但是,我真的更喜欢像这样删除绑定

$(document).off("click", ".modal.mywindow .btnSubmit")

不幸的是,这不起作用,我猜是因为选择器与原来的选择器略有不同".btnSubmit"

有没有办法在不影响同一页面上 ".btnSubmit" 的其他实例的情况下解除事件与该特定选择器的绑定?

我相信您是正确的,"off" 的选择器必须与 "on" 中给出的选择器相匹配,根据 jQuery docs for .off():

To remove specific delegated event handlers, provide a selector argument. The selector string must exactly match the one passed to .on() when the event handler was attached.

如果您在 "on" 中添加一些小逻辑,在提交之前检查单击的按钮是否具有 .modal.mywindow 作为父项,这样是否令人满意?类似于:

$(document).on("click", ".btnSubmit", function (e) {
    e.preventDefault();
    if($(this).closest(".modal.mywindow").length <= 0) {
        $(this).parents("form").submit();   
    }
});

它类似于您的选项 2,但不需要您更改 HTML。