【问题标题】:jquery rebinding eventjquery重新绑定事件
【发布时间】:2023-03-13 20:31:01
【问题描述】:

我正在尝试在 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');
            }

【问题讨论】:

  • 很高兴看到 Rob 的解决方案帮您解决了问题,但我的第一个想法是“我想知道他们是否真的需要绑定和重新绑定,或者他们是否应该使用 .live()、.delegate()或 .on(")(最后一个 v1.7 以后)。

标签: jquery bind dynamic-rebinding


【解决方案1】:

一种可能的解决方案是在调用元素上的bind方法之前定义事件函数,然后在你focusout时重用它来重新绑定。它是这样的:
(这段代码应该可以工作......)

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

享受吧。

【讨论】:

    【解决方案2】:

    您必须保存对该函数的引用。通过保存对函数的引用,可以重新绑定原来的函数:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2010-11-29
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多