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

+0

예, 작동하지 않았습니다. 문제는 함수의 selector가 입력 태그를 선택하지 않는다는 것입니다. 그것은 off 코드를 트리거하지 않습니다. 나는 바인딩에서 잘 작동하는 동일한 선택기를 사용하고 있습니다. – Neel

답변

0

on 대신 Jquery의 one 메서드를 사용할 수 있습니다. 그 one 방법은 무엇 이후

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

그렇다면, 당신은 더 이상에 이벤트 "OFF"필요하지 않습니다.

+0

하지만 모든 필드에 대해 한 번 트리거됩니다. 기본적으로 양식 당 한 번만 제한해야합니다. – Neel

+0

아, 네 말이 맞아, 그 질문에 대해 오해 해. 첨부 된 함수를 off 메소드에 전달하고'$ elm.off ("change", setItemStatus); ' – ErwinGO

+0

메소드를 전달하면이 메소드가 다시 실행됩니다. 그렇지 않습니까? 문제는 함수 선택기에서 입력을 선택하는 것이 작동하지 않는 것 같습니다. 입력 필드를 선택하지 않습니다. 왜 그런 일이 일어날까요? – Neel