2009-11-25 6 views
1

J'ai donc ce problème avec les formulaires générés par Zend Framework.Formulaires de structure Zend et sélecteurs jQuery - comment sélectionner par ... ID?

Comme nous le savons Zend utilise ce format pour l'identification d'éléments HTML, i.e.: contactDetails[name], contactDetails[email] etc.

Tout d'abord, pourquoi Zend utilise invalide HTML pour générer des formes? Il devrait y avoir pas de crochets [] à l'intérieur ids, selon W3C:

jetons d'identité et le nom doit commencer par une lettre ([A-Za-z]) et peut être suivi par un certain nombre de lettres, chiffres ([0-9]), tirets ("-"), souligne ("_"), les deux-points (":"), et les périodes (".").

Mais la vraie question que j'ai est comment sélectionner correctement l'élément par id en utilisant jQuery, si nous devons traiter non valide, Zend généré ids? En standard, cela semble fonctionner: document.getElementById('contactDetails[email]').

Mais dans jQuery: $('#contactDetails[email]') - cela est évidemment faux, car les crochets sont réservés aux sélecteurs d'attribut.

La solution de contournement facile que j'ai trouvé est d'enrouler l'objet natif-js-sélectionné dans la fonction $(): $(document.getElementById('contactDetails[email]')). En utilisant cette méthode, je peux utiliser toutes les fonctions jQuery sur cet objet, mais cela ressemble à une solution hacky ...?

Répondre

3

Essayez d'échapper aux crochets:

$("#contactDetails\\[email\\]"); 

jQuery prévoit que les expressions joignons attribut filtrer. Faites défiler jusqu'à la fin de ce lien:

http://docs.jquery.com/Selectors

De ce qui précède:

La liste complète des caractères qui doivent à échapper: #; &, + * ~ ':.!.. "^ $ => |/

+0

Je viens d'essayer, et ça n'a pas – rochal

+0

@rochal - j'avais d'abord que mettre un backslash S'il vous plaît copier et coller ci-dessus et faites un essai – karim79

+0

double slash travaillé parfaitement, merci beaucoup – rochal