0

Enter キー (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');
}

更新:キープレスイベントを再び機能させるためにページを更新する必要なく、ユーザーが別のリスト(私の場合)を追加できるようにしたい。この投稿の冒頭で述べたように、現時点では、新しいリストが最初に追加されたときにのみ機能し、その後、Enter キーは何もしません。

キーがバインドされていない理由を誰でも理解できますか?

乾杯

4

1 に答える 1

2

あなたの問題は、キープレスが最初に成功した後、フォームを js_refresh_lists() で更新して #new_list フィールドを新しいフィールドに置き換え、キープレスがバインドされていないことだと思います。

上記の場合、2 つのオプションがあります。

  1. keypress init を別の関数に入れ、リストが更新されるたびに実行します
  2. ロード時にライブ バインディング .live("keypress", fn) を使用する
于 2011-09-19T16:09:12.380 に答える