2011-11-29 45 views
5

當使用jQueryUI自動完成並將AutoFocus設置爲true時,如果輸入得太快並按回車鍵,則第一個選擇將替換您輸入的內容,即使它不匹配。例如,如果您輸入「app」,並且第一次選擇的滾動自動填充爲「apple」,然後繼續快速輸入「applique」並按回車,則「applique」將被替換爲「apple 」。jQuery自動完成自動對焦沒有跟上

緊接在輸入的文本被自動完成的第一個選擇替換之前,有什麼方法可以確保第一個選擇與輸入的文本相匹配嗎?

回答

3

減少您在自動完成選項中的延遲時間。如果您使用本地數據,則可以將延遲設置爲0.默認情況下,它設置爲300(ms)。因此,在按下某個鍵之後,需要300ms才能重新評估匹配的數據集。

所以,基本上你的第一個項目的自動對焦,並沒有給它一個機會在輸入之前重新過濾。

或者,您可以在第一次autoFocus後更改中間流延遲。因此,您第一次等待300毫秒以顯示建議,則在焦點事件中,將計時器減少到0毫秒,以便更快地過濾列表。

但要小心,因爲延遲0可能會導致問題,如果它是遠程數據。像這樣的東西可能會運作良好:

$(".selector").autocomplete({ 
    delay: 300, 
    focus: function() { 
    $(".selector").autocomplete("option", "delay", 0); 
    }, 
    source: sourceData 
} 
0

我知道我遲到了,但這一直讓我瘋狂。我不想改變我的延遲,即使我這樣做,如果我輸入得太快,它仍然會抹掉我的最後一個字符。

大傷腦筋後,我找到了最好的解決方案:)

打開你的jQuery-UI-1.8.20.custom.js(不能保證你的代碼將在任何其他版本的工作),然後找到這個行:

   blur: function(event, ui) { 
       // don't set the value of the text field if it's already correct 
       // this prevents moving the cursor unnecessarily 
       if (self.menu.element.is(":visible") && 
        (self.element.val() !== self.term)) { 
        self.element.val(self.term); 
       } 
      } 

只是註釋掉if statement這樣的:

   blur: function(event, ui) { 
       // don't set the value of the text field if it's already correct 
       // this prevents moving the cursor unnecessarily 
       /*COMMENTING THIS IF OUT MAKES AUTOCOMPLETE STOP ERASING WHAT YOU TYPE 
       if (self.menu.element.is(":visible") && 
        (self.element.val() !== self.term)) { 
        self.element.val(self.term); 
       } 
       */ 
      } 

,一切都將正常工作:)