2011-08-17 9 views
7

Przykładowy kod tutaj: http://jsbin.com/etaziy (używając http://jqueryui.com/demos/autocomplete/)jQuery UI .autocomplete() nie wypalanie gdy sama litera wszedł po blur()

Po wpisaniu w 'J' można uzyskać 3 nazwiska 'John' ' Jack "i" Joe ". Jeśli następnie się rozmyjesz, usuwam dane wejściowe, po prostu wprowadzając wartości val (''). Następnie, jeśli wrócisz do wejścia i ponownie wpisasz "j", nic się nie dzieje? Dopiero gdy wpiszesz drugą pasującą literę, otrzymasz wyskakujące okienko.

Mój przykład może wydawać się nieco dziwny, ale w istocie jest to naprawdę skrócony wers tego nad czym pracuję. Muszę wyczyścić dane wejściowe po rozmyciu() i wyczyścić je po dokonaniu wyboru. Powoduje to, że kolejne selekcje wyglądają na błędne.

Częściowo myślę, że to jest zamierzona funkcjonalność, ale dla mojego celu nie jest to, czego chcę. Naprawdę potrzebuję wyskakującego okienka z listą do wyświetlenia, gdy tylko zostanie wpisana jakakolwiek litera.

Pozdrawiam.

Odpowiedz

10

Problem polega na tym, że funkcja autouzupełniania śledzi wewnętrzną wartość, do której pasuje, więc po pierwszym wpisaniu nazwy j ustawia tę wartość wewnętrzną na "j", a następnie nie została przywrócona do pustego ciągu, gdy zmienił dane wejściowe, aby były puste.

Po sprawdzeniu źródła autouzupełniania nie byłem w stanie dowiedzieć się, jak uzyskać bezpośredni dostęp do zmiennej wewnętrznej, ale możesz wymusić automatyczne uzupełnianie, aby zaktualizować je za Ciebie, uruchamiając kolejne wyszukiwanie po zmianie danych wejściowych puste (i o długości równej zeru nie będzie ono faktycznie wyszukiwać).

$(function() { 
    $("#search").autocomplete({ 
       source: data, 
       change: function() { // Triggered when the field is blurred, if the value has changed; ui.item refers to the selected item. 
         $("#search").val(""); 
         $("#search").autocomplete("search", ""); //THIS IS THE NEW LINE THAT MAKES IT HAPPY 
       } 
     }); 
}); 
4

Wystarczy zastąpić linię 98 w jquery.ui.autocomplete.js

if (self.term != self.element.val()) { // only search if the value has changed 

z if(true){

Powiązane problemy