2011-11-06 176 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 
}) 

享受。