2 Stimmen

Verwendung des aktuellen Selektors in JQuery Autocomplete

Ich verwende JQuery UI's Autocomplete Widget und möchte Zugriff auf den aktuellen Selektor haben, an den ich die Autocomplete anhänge. Ich habe einen Weg gefunden, um den Selektor zugreifen, mit einer früheren Frage hier, aber die Quellfunktion wird mit falsch aufgerufen.

Mein aktueller Code sieht wie folgt aus

$("input[id$=artist]").each(function() {
    e1 = $(this);
    curID = $(this).parent('td').parent('tr').attr('id');       
    e1.autocomplete({
        minLength: 3,
        source: function(request, response) { 
            findSuggestions(request, response, 'artist', artist_cache, curID);
        }
    });
});

Wie Sie sehen können, erhalte ich den aktuellen Selektor und füge ihn in e1 ein. Es gibt mehrere Zeilen mit der gegebenen "artist"-Eingabe, und ich möchte in der Lage sein, die ID für jede Zeile in der findSuggestions Methode, aber wenn die Methode aufgerufen wird, erhält jede Zeile dieselbe ID (die die Referenzierung der letzten Zeile ist).

Haben Sie eine Idee, warum dies der Fall sein könnte? Gehe ich dieses Problem falsch an?

Danke!

3voto

redsquare Punkte 76970

Sie müssen Ihre Variable innerhalb der Schließung definieren, um ihr einen lokalen Geltungsbereich zu geben, da Sie sonst eine globale Variable erstellen

$("input[id$=artist]").each(function() {
    var e1 = $(this);
    var curID = $(this).parent('td').parent('tr').attr('id');       
    e1.autocomplete({
        minLength: 3,
        source: function(request, response) { 
            findSuggestions(request, response, 'artist', artist_cache, curID);
        }
    });
});

2voto

Anurag Punkte 136648

Sie haben vergessen zu schreiben var vor dem curID variabel.

Das erzeugt eine globale Variable curID auf das Fensterobjekt, so dass sich jede Quell-Callback-Funktion auf dasselbe Objekt und damit auf denselben Wert bezieht.

Wechseln zu

var curID = $(this).parent('td').parent('tr').attr('id');       

Vergessen Sie nie, die var vor einer Variablendeklaration zu verwenden, da dies die Ursache für schmerzhafte Fehler wie diesen sein kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X