2010-10-18 7 views
5

Ich habe ein Autovervollständigungssteuerelement jQuery UI, das eine Ajax-Anforderung auslöst, wenn minLength = 3 ist. Das Problem ist wie folgt: Angenommen, ich gebe "fic" als Initial ein Suchbegriff - das ist in Ordnung. Die Anforderung wird ausgelöst und die Ergebnisse werden zurückgegeben. Ich entscheide, dass ich keines der Ergebnisse auswählen und dann die gleiche Suche erneut eingeben möchte (fic). Diesmal wird keine Ajax-Anfrage ausgelöst!jQuery UI Autocomplete löst keine Suche aus, wenn ein bisher gesuchter Begriff eingegeben wird

Mein Code ist unten dargestellt:

// ... do request 
$("#reportSearch").autocomplete({ 
    delay: 50, 
    minLength: 3, 
    source: function(q, add){ 
     $.ajaxSetup ({ cache: false});    
     $.ajax({ 
      type: "GET", 
      url: K_URL_REQUEST 


Also im Grunde der „Quelle“ Rückruf wird im zweiten Szenario nicht gefeuert ich oben beschrieben. Es zeigte sich, dass der Grund dafür war, dass die zur automatischen Vervollständigung Kontrolle wurde auf die vorherigen Suchwort halten und weil es angepasst - nicht wurde das Auslösen einer Suche:

// Taken from jquery-ui-1.8.4.custom.min.js 
if (a.term != a.element.val()) { // *** THE MATCH IS HERE 
    //console.log("a.term != a.element.val(): "+a.term+", "+a.element.val()); 
    a.selectedItem = null; 
    a.search(null, c) // *** SEARCH IS TRIGGERED HERE 
} 


Um es zu bekommen Um jedes Mal zu feuern, setze ich den Suchbegriff einfach auf null zurück, nachdem eine Suche zurückgegeben wurde. So hat es wie erwartet funktioniert.

Die Sache ist, ich verstehe dieses Verhalten nicht. Ich hätte gedacht, dass jede Suche verschieden sein sollte. Es gibt kein Caching (oder sollte es nicht sein).

Also obwohl ich mein Problem behoben habe, habe ich das Gefühl, dass ich hier etwas verpasst habe.

Irgendwelche Ideen jemand? Danke im Voraus!

+0

Whate hat Ihr [** 'search' **] (http://docs.jquery.com/UI/Autocomplete#event-search) Ereignis Blick mögen? Wie ich es verstehe, sollte die Autocomplete in Ihrem zweiten Szenario auslösen. –

+0

Beachten Sie, wie Sie 'jav' eingeben können, löschen Sie es und geben Sie es erneut ein, und es funktioniert immer noch mit dieser Demo ==> http://jsfiddle.net/KFrQm/. –

+0

Hallo Peter - Ich habe kein Such-Event. Es ist nicht notwendig, die Suche zu starten. Sie haben Recht mit dem Beispiel. Das habe ich schon vorher bemerkt - der einzige Unterschied ist, dass meine Quelle eine Ajax-Anfrage ist. – peetj

Antwort

6

ich eine Lösung für dieses Problem gefunden haben (für Info, ich bin mit jQuery UI 1.8.4)

Die automatische Vervollständigung Implementierung in der jquery-ui-1.8.4.custom.js hat eine Methode definiert als _Veränderung. Durch das Auskommentieren der wenn Anweisung, sendet die Steuerung immer die Anfrage.

+0

Duncan - danke für Ihre Antwort – peetj

+0

Kann bestätigen, dass diese kombinierte w/Stefaan's Antwort in 1.8.14 funktioniert. Vielen Dank. –

6

Ich habe es geschafft, dieses Problem zu lösen, indem Sie diese if-Anweisung in der Quelle der jquery ui Autocomplete kommentieren.

// keypress is triggered before the input value is changed 
clearTimeout(self.searching); 
self.searching = setTimeout(function() { 
    // only search if the value has changed 
    //if (self.term != self.element.val()) { 
     self.selectedItem = null; 
     self.search(null, event); 
    //} 
}, self.options.delay); 
7

Statt die jquery.ui ändern, können Sie versuchen, den Wert der Eigenschaft "vorherigen" Löschen, so etwas wie dies zu tun:.
$ (this) .data() autocomplete.previous = null;

+0

Ich habe das gleiche Problem in jquerymobile Autocomplete hier ist der Link http://stackoverflow.com/q/18798630/2307391 –

+0

gezequiels Antwort funktioniert für mich, nur in meinem Fall war es: $ (this) .data(). autocomplete.term = null; – Babayoto

+0

on jQuery 1.10.2 '$ (this) .data(). UiAutocomplete.term = null;' hat für mich funktioniert – Safareli

0

Tolle Tipps hier - das ist etwas, mit dem ich seit einiger Zeit zu kämpfen habe.

Für mich ist die einzige Lösung, die konsequent funktioniert, eine Kombination von Duncan und Stefaan Antworten oben.

1

Seit JQuery UI 1.8+ können Sie die Widget-Factory verwenden, um das Standardverhalten aller Autocomplete-Widgets zu erweitern. sind einfach eine JavaScript-Datei mit diesem Inhalt nach jQueryUI

// Extend jquery UI autocomplete 
$.widget("ui.autocomplete", $.ui.autocomplete, { 
    _close: function(event) { 
     var ret = this._super(); 

     // Resets previously used search term 
     this.term = null; 

     return ret; 
    } 
}); 
Verwandte Themen