Не удается отменить привязку события нажатия клавиши после однократного нажатия - PullRequest
0 голосов
/ 19 сентября 2011

Я создал поле ввода, которое представляет простое поле при нажатии клавиши ввода (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');
}

ОБНОВЛЕНИЕ: я хочу, чтобы пользователь мог добавить другой список (в моем случае) без необходимости обновлять страницу, чтобы событие нажатия клавиш снова заработало. На данный момент, как указано в начале этого поста, он работает только при первом добавлении нового списка, после чего клавиша ввода ничего не делает.

Может кто-нибудь выяснить, почему ключ отсоединяется?

Приветствия

1 Ответ

2 голосов
/ 19 сентября 2011

Я думаю, что ваша проблема в том, что после первого успешного нажатия клавиши вы обновляете свою форму с помощью js_refresh_lists (), которая заменяет ваше поле #new_list на новое, в котором нет привязки нажатия клавиш.

В приведенном выше случае у вас есть 2 варианта:

  1. поместите инициализацию нажатия клавиш в отдельную функцию и выполняйте ее при каждом обновлении списка
  2. использовать живую привязку .live ("нажатие клавиши", fn) при загрузке
...