2012-12-01 78 views
1

我試圖讓我自己的搜索名稱,一個類似facebook的搜索(自動完成),如在Facebook的撰寫消息。我的整個劇本在http://jsfiddle.net/6YbrP/4/:最後不僅刪除最後一個元素

的問題是我stucked這段代碼:

.keyup(function(e){ 
      if(e.keyCode == 8 && $(this).val() == ''){ 
       $('#itemcontainer div.detailwrapper:last').remove(); 
      } 
     }); 

它並刪除最後一個元素,如果我只是點擊複選框,然後按退格鍵。但不是當我點擊框內時,然後在框外點擊,再次在框內點擊,然後重新按退格鍵。它刪除/刪除了最後2個元素,而不僅僅是最後一個元素。這怎麼會發生?我怎麼能修好它?

謝謝你的回覆。

+6

這是因爲您每次單擊框內時都會綁定一個新的'keyup'事件處理程序。即如果你點擊了兩次,你有兩個事件處理程序監聽'keyup'事件,並且每個事件處理程序都會依次觸發並刪除最後一個元素。不要在其他事件處理程序中綁定事件處理程序。 –

+0

在小提琴中有一個腳本錯誤baseURL未定義 –

+0

@FelixKling:Aaa ..就是這樣:D它現在可以工作。謝謝:) 現在,只是第二個還沒有解決 – thom

回答

2

飾演Felix克林說 - 那是因爲你綁定KEYUP多個,固定代碼:

if ($('#itemcontainer').html().trim()) { 
    $('#searchnama').removeAttr('placeholder'); 
} else { 
    $('#searchnama').attr('placeholder', 'Item'); 
} 

$('.listcontainer').bind('click', function() { 
    $('#searchnama').focus(); 
}); 
$('#searchnama').keyup(function(e) { 
    if (e.keyCode == 8 && $(this).val() == '') { 
     $('#itemcontainer div.detailwrapper:last').remove(); 
    } 


    if ($('#itemcontainer').html().trim()) { 
     $('#searchnama').removeAttr('placeholder'); 
    } else { 
     $('#searchnama').attr('placeholder', 'Item'); 
    } 
}); 
$('.remove').bind('click', function() { 
    $(this).closest('div.detailwrapper').remove(); 
});​ 

也有普通的設計錯誤, - 你總是使用絕對選擇,它可能會導致在代碼中的許多困惑剛比這個大一點。

+0

我已經根據@FelixKling方向修復了我的腳本。順便說一句,謝謝你對'絕對選擇者'的建議:D – thom

相關問題