使用不同的seletor从Document取消绑定事件

时间:2015-10-22 15:50:11

标签: jquery events binding jquery-selectors

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

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

现在我有一个一次性的实例,我需要一个模态窗口上的.btnSubmit按钮才能有不同的行为。我有两个解决方法

  1. 使用不同的类
  2. 向按钮添加数据属性并向上面的绑定添加条件
  3. 但是,我真的更喜欢删除绑定,就像这样

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

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

    略有不同

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

1 个答案:

答案 0 :(得分:0)

我认为你是正确的,“off”的选择器必须匹配“on”中给出的选项,符合jQuery docs for .off()

  

要删除特定的委派事件处理程序,请提供选择器   论点。选择器字符串必须与传递给的字符串完全匹配   附加事件处理程序时的.on()。

如果您在“on”中添加了一些小逻辑,在提交之前检查点击的按钮是否将.modal.mywindow作为父级,这会令人满意吗?类似的东西:

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

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