2010-07-15 5 views
2

J'utilise le widget de saisie semi-automatique de JQuery UI et souhaite avoir accès au sélecteur actuel auquel j'attache la saisie semi-automatique. J'ai trouvé un moyen d'accéder au sélecteur, en utilisant une question précédente ici, mais la fonction source est appelée incorrectement.Utilisation du sélecteur de courant dans la saisie semi-automatique JQuery

Mon code actuel ressemble à ce

$("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); 
     } 
    }); 
}); 

Comme vous pouvez le voir, je reçois le sélecteur en cours et mettre en e1. Il y a plusieurs lignes avec l'entrée 'artist' donnée et je veux être capable de connaître l'ID de chaque ligne dans la méthode findSuggestions mais quand la méthode est appelée, chaque ligne reçoit le même ID (qui est la référence à la dernière de les lignes.

Toute idée pourquoi cela pourrait se produire? Suis-je aborder ce problème de manière incorrecte?

Merci!

Répondre

3

vous devez définir votre variable à l'intérieur de la fermeture pour lui donner une portée locale, sinon vous créez une variable globale

$("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); 
     } 
    }); 
}); 
+0

Ah, bien sûr! Toujours une erreur simple, et me fait toujours me sentir bête ... merci pour l'aide !! –

2

Vous avez oublié de mettre var avant la variable curID.

Cela crée une variable globale curID sur l'objet window, de sorte que chaque fonction de rappel source fait référence au même objet, et donc à la valeur.

Modification

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

Ne jamais oublier de mettre var avant une déclaration de variable, car il peut être la source de bugs douloureux comme celui-ci.

Questions connexes