2014-08-29 72 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