Javascript jquery一次性从多个输入字段取消绑定事件

Javascript jquery一次性从多个输入字段取消绑定事件,javascript,jquery,forms,unbind,Javascript,Jquery,Forms,Unbind,我有一个需求,需要跟踪特定div中输入字段的更改,并在发生更改时触发事件 我使用下面的代码来实现这一点 $('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){ var $elem = $(this); $elem.data("oldval",$elem.val());

我有一个需求,需要跟踪特定div中输入字段的更改,并在发生更改时触发事件

我使用下面的代码来实现这一点

                $('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){
                    var $elem = $(this);
                    $elem.data("oldval",$elem.val());
                    $elem.on("change",{ctx:this},setItemStatus);
                }); 
这很好,但要求的第二部分是事件只能触发一次。也就是说

  • 当第一个字段更改时,将触发事件
  • 然后从所有输入字段中取消绑定更改
  • 对于这一部分,我编写了以下函数

            function setItemStatus(event){
                var $el = $(this);
                if($el.val() != $el.data("oldval")){
                    console.log("Invoke Update Method");
                    //unbind the events so that it doesn't trigger the update twice.
                    $('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){
                        var $elm = $(this);
                        $elm.off("change");
                    });
                }
    
            }
    
    但即使在这个更改事件没有解除绑定之后,如果我在表单的任何其他字段中进行更改,它仍然会触发

    我知道我可以设置停止执行代码的条件,但我想取消绑定。

    您可以使用Jquery的方法,而不是使用上的

    $('div.dc2-content:eq(1) input:not([aria-readonly])').each(function(){
      var $elem = $(this);
      $elem.data("oldval",$elem.val());
      $elem.one("change",{ctx:this},setItemStatus);
    }); 
    

    然后,您不再需要“关闭”事件,因为这是
    one
    方法所做的?而不是.off()。是的,它不起作用。问题是函数中的选择器没有选择任何输入标记。它从不触发关闭代码。我使用的是同一个选择器,它在绑定中工作得很好。但有一个选择器意味着它将为每个字段触发一次。我需要基本上限制每个表单一次。哦,你是对的,误解了这个问题。尝试将附加的函数也传递给off方法
    $elm.off(“change”,setItemStatus)传递该方法将导致该方法再次执行。不是吗。问题似乎是在功能选择器中选择输入不起作用。它从不选择任何输入字段。知道为什么会这样吗???也许是你的jQuery版本?我做了一个模拟你的问题,它的工作。尝试在您的站点上进行测试。