當使用jQueryUI自動完成並將AutoFocus設置爲true時,如果輸入得太快並按回車鍵,則第一個選擇將替換您輸入的內容,即使它不匹配。例如,如果您輸入「app」,並且第一次選擇的滾動自動填充爲「apple」,然後繼續快速輸入「applique」並按回車,則「applique」將被替換爲「apple 」。jQuery自動完成自動對焦沒有跟上
緊接在輸入的文本被自動完成的第一個選擇替換之前,有什麼方法可以確保第一個選擇與輸入的文本相匹配嗎?
當使用jQueryUI自動完成並將AutoFocus設置爲true時,如果輸入得太快並按回車鍵,則第一個選擇將替換您輸入的內容,即使它不匹配。例如,如果您輸入「app」,並且第一次選擇的滾動自動填充爲「apple」,然後繼續快速輸入「applique」並按回車,則「applique」將被替換爲「apple 」。jQuery自動完成自動對焦沒有跟上
緊接在輸入的文本被自動完成的第一個選擇替換之前,有什麼方法可以確保第一個選擇與輸入的文本相匹配嗎?
減少您在自動完成選項中的延遲時間。如果您使用本地數據,則可以將延遲設置爲0.默認情況下,它設置爲300(ms)。因此,在按下某個鍵之後,需要300ms才能重新評估匹配的數據集。
所以,基本上你的第一個項目的自動對焦,並沒有給它一個機會在輸入之前重新過濾。
或者,您可以在第一次autoFocus後更改中間流延遲。因此,您第一次等待300毫秒以顯示建議,則在焦點事件中,將計時器減少到0毫秒,以便更快地過濾列表。
但要小心,因爲延遲0可能會導致問題,如果它是遠程數據。像這樣的東西可能會運作良好:
$(".selector").autocomplete({
delay: 300,
focus: function() {
$(".selector").autocomplete("option", "delay", 0);
},
source: sourceData
}
我知道我遲到了,但這一直讓我瘋狂。我不想改變我的延遲,即使我這樣做,如果我輸入得太快,它仍然會抹掉我的最後一個字符。
大傷腦筋後,我找到了最好的解決方案:)
打開你的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);
}
*/
}
,一切都將正常工作:)