按一次键后无法取消绑定按键事件

时间:2011-09-19 15:57:15

标签: jquery keypress unbind

我创建了一个输入字段,在按下回车键(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');
}

更新:我希望用户能够添加另一个列表(我的情况)而无需刷新页面以使keypress事件再次运行。在本文顶部提到的那一刻,它只在第一次添加新列表时起作用,之后输入键不起作用。

任何人都可以找出密钥解除绑定的原因吗?

干杯

1 个答案:

答案 0 :(得分:2)

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

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

  1. 将您的keypress init放在一个单独的函数中,并在每个列表刷新
  2. 上执行它
  3. 在加载时使用活动绑定.live(“keypress”,fn)