2011-09-19 112 views
0

我已經創建了一個輸入框,當按下回車鍵(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鍵不執行任何操作。

任何人都可以找出爲什麼鍵是解除綁定?

乾杯

+0

你的問題很混亂。你打電話解除綁定人員的輸入。 – Joe

+0

你想完成什麼?解除綁定會導致它不會調用按鍵事件,這聽起來像現在正在發生的事情。 –

+0

我已更新我的問題。 – afarazit

回答

2

我覺得你的問題是,第一次成功後,按鍵刷新與js_refresh_lists表單(),它用一個新的,不具有在其上的按鍵綁定替換您#new_list場。

在上述情況下,你有兩個選擇:

  1. 把你的按鍵的init在一個單獨的功能,並執行它的每一個列表刷新
  2. 使用Live結合.live(「按鍵」,FN) on load
+0

你說得對,我用新的'#new_list'替換了那個問題。我沒有新的.live()的存在。我已經用.live()替換了.bind(),並且它按照我的需要工作。非常感謝。 – afarazit