2011-02-25 101 views
0

由於you can see here,我的小jQuery腳本運行兩次後不工作,我得到一個奇怪的錯誤。你們中的任何一個碰巧知道發生了什麼/如何解決它?如果你這樣做會很棒!jQuery在執行一次後不工作

謝謝!

康納

+0

注:該錯誤顯示了在2返回 – thenoviceoof 2011-02-25 05:19:31

+0

@thenoviceoof謝謝你 - 只是固定它;) – Connor 2011-02-25 05:23:10

回答

2

您只綁定第一個.focus元素上的按鍵事件。一旦你刪除它,它將不會再收到按鍵事件。

改變這一行

$(".focus").keypress(function(event) { 

$(".focus").live("keypress",function(event) { 

的jQuery .live()附加一個處理程序的情況下爲當前選擇現在和將來匹配這,所有的元素。

另外,你需要以上低於行 後添加是爲了防止意外的行爲:

if (event.which == '13') { 
    event.preventDefault(); < stop the enter keypress 
+0

完美,完美無瑕。謝謝 - 一旦它允許我將它標記爲正確! – Connor 2011-02-25 05:27:04

+0

增加了一行代碼來回答 – Nimrod 2011-02-25 05:28:52

+0

另外,您可能想考慮Ates的建議,只需將'.before()',文本插入到'.active-live'元素中,而不是全部刪除'' 。 – Nimrod 2011-02-25 05:30:40

1

你消除對您要添加的初始keypress事件處理程序的元素。速戰速決是採取了事件處理成一個功能,它重新連接到新添加的元素:

function handleKeyPress(event) { 
    if (event.which == '13') { 
     var itemToAdd = $(".focus").val(); 
     if (itemToAdd != ""){ 
      $(this).remove(); 
      $(".active-li").append(itemToAdd); 
      $("#wrapper ul").append("<li class='active'><input type='text' class='root focus' /></li>"); 
      $(".active-li").removeAttr("class"); 
      $(".active").removeClass("active").addClass("active-li"); 
      $(".focus").keypress(handleKeyPress).focus(); 
     } 
    } 
} 

$(".focus").keypress(handleKeyPress); 

但我必須說,這看起來像一個非常低效的方式來實現你想要什麼在這裏做...想想一個替代解決方案,您不必刪除您的輸入元素(只需在它之前插入新的<li>即可)。

+0

謝謝阿泰,我一定會考慮的! – Connor 2011-02-25 05:34:33

相關問題