2009-09-23 6 views
0

quelqu'un peut-il expliquer pourquoi ce sélecteur jquery ne fonctionne pas, je l'ai travaillé autour de la question, mais pour ma santé mentale aimerait savoir ce que j'ai malsélecteur jquery dans la variable

J'ai un formulaire avec plusieurs textareas , chacun reçoit un identifiant comme f_id_DSC000001.JPG où la dernière partie est un numéro de photo, le textarea a un événement onblur qui utilise post pour envoyer son contenu et mettre à jour une table de base de données, une réponse json revient. Tout cela fonctionne très bien, je peux voir les résultats en utilisant Firebug, il n'y a pas de problèmes là-bas. La partie DSC000001.JPG de l'ID est renvoyée dans la réponse json comme confirmation, puis je souhaite modifier la classe de la zone de texte pour afficher l'état de la mise à jour.

Quand je fais

var textarea_selector="#f_id_"+res_data.image_filename; 
$(textarea_selector).removeClass("kw-class"); 
$(textarea_selector).addClass("update-failed"); 

la classe ne change pas, mais si je le fais

$("textarea[id*='"+res_data.image_filename+"']").removeClass("kw-class"); 
        $("textarea[id*='"+res_data.image_filename+"']").addClass("update-done"); 

il fonctionne très bien. .

Je ne suis pas un javascript/expert jquery :-(donc une explication de base est ce que je voudrais vraiment apprécier

Répondre

8

Vous avez un point dans votre ID, et est interprété comme un class selector.

#f_id_DSC000001.JPG 
\_____________/\__/ 
id    class 

Mais cela devrait fonctionner:

var textarea_element = document.getElementById("f_id_"+res_data.image_filename); 
$(textarea_element).removeClass("kw-class").addClass("update-failed"); 

Ou ceci:

var textarea_id = "f_id_"+res_data.image_filename; 
$("[id="+textarea_id+"]").removeClass("kw-class").addClass("update-failed"); 
+0

aurait pu essayer de le résoudre de la manière jquery. néanmoins +1 pour repérer l'erreur. – mauris

+1

bien repéré, je vais revoir le code. Ces réponses sont d'une grande aide pour les personnes comme moi qui travaillent seules. –

0

Il semble que vous appeliez deux ID différents. Pourquoi apposez-vous "#f_id" dans le premier exemple? vous devriez juste pouvoir ajouter '#' à l'identifiant d'un élément et le sélectionner correctement.

+0

id * = signifie qu'il ne doit contenir que cette valeur, donc vous n'avez pas à ajouter quoi que ce soit ... – NDM

+0

ah. raté le * là. – GSto

0

Essayez:

var textarea = $("textarea[id*='"+res_data.image_filename+"']"); 
textarea.removeClass("kw-class"); 
textarea.addClass("update-failed"); 

Vous n'êtes pas construire le sélecteur le même que l'exemple dans votre post, ce qui explique pourquoi il est défaillant. Cette solution vous ne faites que la sélection une fois.

1

Vous devez faire attention à éviter les caractères étranges dans vos ID. Voir the jQuery FAQ pour plus.