【问题标题】:Can't unbind keypress event after the key is pressed once按键一次后无法取消绑定按键事件
【发布时间】:2011-09-19 15:57:15
【问题描述】:

我创建了一个输入字段,当按下回车键 (13) 时提交一个简单字段。如果您第一次按下该键,该代码就可以工作,但在我刷新页面之前它永远不会再次工作。我正在尝试解除绑定事件,但没有任何反应。

$(function () {
    $('#new_list').bind('keypress', function (e) {
        if(e.which === 13) {
            console.log('enter pressed');
            var nl_val = {};
            nl_val['list_name'] = $('#new_list').val();
            $.post('/lists/js_new_list',nl_val,function(str) {
                if(str == 'error') {
                    $('#info').css({'color':'red'})
                              .fadeIn(1000)
                              .text('There was an error.')
                              .fadeOut(1000);
                } else {
                    $('#new_list').hide().val('');
                    $('#info').css({'color':'#00620C'})
                              .fadeIn(1000)
                              .text('List created.')
                              .fadeOut(1000);
                    js_refresh_lists(); 
                }
            });
             $('#new_list').unbind("keypress");
        } // UPDATE: this is the if(e.which === 13) end
    });
});

function js_refresh_lists() {
    var id = list_id();
    console.log('refreshing list');
    $('#lists').load('/lists/js_refresh_lists');
}

更新:我希望用户能够添加另一个列表(我的情况),而无需刷新页面以使按键事件再次起作用。目前,如本文顶部所述,它仅在第一次添加新列表时有效,之后回车键不起作用。

谁能弄清楚为什么密钥被解除绑定?

干杯

【问题讨论】:

  • 您的问题令人困惑。您正在调用 unbind 与击中的人的输入。
  • 你想完成什么?解除绑定将导致它不调用 keypress 事件,这听起来像是现在正在发生的事情。

标签: jquery keypress unbind


【解决方案1】:

我认为您的问题是,在第一次成功按键后,您使用 js_refresh_lists() 刷新表单,它将您的 #new_list 字段替换为没有按键绑定的新字段。

在上述情况下,您有 2 个选项:

  1. 将您的按键初始化放在一个单独的函数中,并在每次列表刷新时执行它
  2. 在加载时使用实时绑定 .live("keypress", fn)

【讨论】:

  • 你是对的,我正在用一个新的替换#new_list,这就是问题所在。我没有新的 .live() 的存在。我已经用 .live() 替换了 .bind() 并且它可以按我的意愿工作。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多