2014-08-29 73 views
0

我有要求在哪里需要跟踪对特定div中输入字段的更改,并在发生了某些更改时触发事件。jquery从多个输入字段一次去除绑定事件

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

   $('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); 
       }); 

这是工作正常,但的要求,第二部分是该事件应该只触发一次。这意味着

  1. 当第一个字段被更改触发事件。
  2. 然后从所有输入字段

对于这一部分,我写了解除绑定的变化下面的函数

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

     } 

但即使这种改变事件不是unbinded如果我做出改变它仍然触发表单的任何其他字段。

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

+0

试试.unbind()?而不是.off()。 – NomNomNom 2014-08-29 07:11:38

+0

是的,它没有奏效。问题在于函数中的选择器没有选择任何输入标签。它从不触发关闭代码。我正在使用相同的选择器,它在绑定中工作正常。 – Neel 2014-08-29 09:54:10

回答

0

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

$('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方法你不必为“关”的事件了。

+0

但是其中一个意味着它会触发一次每场。我需要基本上将其限制为每个表单一次。 – Neel 2014-08-29 07:41:19

+0

哦,你是对的,误解了这个问题。尝试将附加函数传递给off方法以及'$ elm.off(“change”,setItemStatus);传递该方法的' – ErwinGO 2014-08-29 07:49:36

+0

将导致此方法再次执行。不是吗。问题似乎是在功能选择器中选择输入不起作用。它从不选择任何输入字段。任何想法为什么会发生? – Neel 2014-08-29 10:19:57