2014-09-25 73 views
0

我寫了一個自動完成類型thingy,它通過divs並將它們添加到列表中,如果它們的名稱/ id被找到。我正在使用一個我在線發現的事件處理程序,該程序會在任何輸入更改時調用。我遇到的問題是:當找到一個有效的div並將其添加到自動完成列表中,然後用戶繼續輸入,但輸入了無效的div名稱時,div名稱將從列表中刪除;但是,如果找不到div,列表會一直存在,但是空白。在輸入變化上刪除div

更好的解釋方法是試用。

http://jsfiddle.net/ypz0zrzv/21/

類型「測試單位」框中,然後繼續輸入隨機的字母。我正在嘗試將現在空的列表刪除。問題在於,當我實現這樣的功能時,只有在輸入第二個字符後纔會發生。這是因爲處理程序檢查輸入更改列表。

所以,如果我輸入「測試單位」它添加div。如果我輸入「Test Unita」,它會顯示一個空白的自動完成div。如果我現在鍵入「測試Unitaa」,自動完成div將會消失。我很困惑如何讓自動完成在發現沒有div後立即變爲空白。問題

代碼問題

if ($('#autocomplete_list li').length === 0){ 
    hide_remove($('#autocomplete')) 
} 

回答

0

您的自動完成的檢查是在錯誤的位置。它是由錯誤事件觸發的。

我感動的支票存入自己的功能,如果你想在以後的時間調用此檢查:

function checkArray(){ 
    console.log($('#autocomplete_list li').length); 
    if ($('#autocomplete_list li').length <= 0){ 
     hide_remove($('#autocomplete')) 
    } 
} 

然後我又加了一句:checkArray()功能到hide_remove()功能。

function hide_remove($div){ 
    if ($div.length > 0){ 
     $div.slideUp(250, function(){ 
      $div.remove(); 
      checkArray(); 
     }); 
    } 
} 

這是DEMO。希望這可以幫助!

+0

謝謝!但是在那裏遞歸會有什麼危險嗎? hide_remove會調用check array,其中調用hide remove等。 – tdoakiiii 2014-09-25 19:03:34

+0

我明白了你的觀點,但檢查控制檯日誌。它似乎不會導致遞歸,否則控制檯將繼續輸出數組的長度。 – wrxsti 2014-09-25 19:12:57

+0

另外,如果需要的話,我確定還有另一個地方可以觸發該功能。 – wrxsti 2014-09-25 19:14:30