jquery重新绑定事件

时间:2011-11-06 17:06:15

标签: jquery bind dynamic-rebinding

我正在尝试在focusout上重新绑定keydown事件。重新绑定时不确定如何传递给keydown。我尝试过这个,但没有运气。

任何?感谢

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

            },focusin : function(e) {

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

2 个答案:

答案 0 :(得分:4)

其中一个可能的解决方案是在调用元素上的bind方法之前定义事件函数,然后在聚焦时重新使用它来重新绑定。它是这样的:
(这段代码应该有用......)

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
})

享受。

答案 1 :(得分: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
}