2011-11-06 2 views
1

포커스가있는 상태에서 keydown 이벤트를 리 바인드하려고합니다. 다시 바인딩 할 때 keydown으로 전달할 방법을 잘 모르겠습니다. 나는 이것을 통과하려했지만 행운이 없었다.jquery 리 바인딩 이벤트

누구나? 감사합니다

$('input.text').bind({ 
      click : function(e) { 

      },focusin : function(e) { 

      },focusout : function() { 
       // rebind keydown 
          // $(this).bind('keydown', this); 
      },keydown : function() { 
       $(this).unbind('keydown'); 
      } 
+0

롭의 솔루션이 당신을 분류했음을 알았지 만, 내 생각으로는 "실제로 바인딩하고 다시 바인딩해야하는지 또는 .live(), .delegate() 또는 .on (") (마지막 v1.7 이후). –

답변

3

기능에 대한 참조를 저장해야합니다. 때 다시 바인딩 재사용 후 가능한 솔루션

var keydown_func = function() { 
    $(this).unbind('keydown'); 
}; 
$('input.text').bind({ 
    click : function(e) { 

    },focusin : function(e) { 

    },focusout : function() { 
     // rebind keydown 
     $(this).bind('keydown', keydown_func); 
    },keydown : keydown_func 
} 
+0

이렇게했습니다. 이것을 지적 해 주셔서 감사합니다. – slik

4

하나의 소자에 결합 메소드를 호출하기 전에 이벤트 함수를 정의하고, 다음 함수에 대한 참조를 저장하면 원래 함수를 다시 바인딩 할 초점. 그것은 이런 식입니다 :
(이 코드가 작동합니다 ...)

keyDownFn = function() { 
    console.log('this will happen only on the first keydown event!'); 
    $(this).unbind('keydown') 
} 

$('input.text').bind({ 
    click: function(e) {}, 
    focusin: function(e) {}, 
    focusout: function() { $(this).bind('keydown', keyDownFn); }, 
    keydown: keyDownFn 
}) 

을 즐길 수 있습니다.