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

享受。