2010-05-16 4 views
1

J'ai un simple formulaire HTML avec un champ comme suit:Les champs en CakePHP ne pouvaient pas être désignés par JQuery

<input type="text" name="data['User']['user_id']" id="data['User']['user_id']" value="1"> 


$(document).ready(function(){ 
$("#data['User']['user_id']").mouseover(function(){ 
alert("hello"); 
}); 

}); 

Le code pourrait ne pas fonctionner,
je pense qu'il peut être le nom du Champ de texte d'entrée qui a causé le problème,
mais je ne sais pas comment le modifier
parce que c'est la convention de nommage dans CakePHP.

+1

Le problème étant que le javascript ne fait rien? JQuery semble être incapable de trouver l'élément spécifié dans votre sélecteur? – Hober

+1

pourquoi ne pas faire le 'id' juste une chaîne simple? – Young

Répondre

3

Le jQuery documentation a la réponse:

Si vous souhaitez utiliser les méta-caractères (#;&,.+*~':"!^$[]()=>|/) comme une partie littérale d'un nom, vous devez échapper au caractère avec deux barres obliques inverses: \\. Par exemple, si vous avez une entrée avec name="names[]", vous pouvez utiliser le sélecteur $("input[name=names\\[\\]]").

Donc dans votre cas: $("input[name=\\[User\\]\\[user_id\\]]")

Notez bien que je pense que le fragment de code HTML que vous avez envoyé faux. Par défaut, la forme de gâteau aide crée des éléments comme ceci:

<input type="text" name="data[User][user_id]" id="UserUserId" value="1"> 

Le nom ne contient aucun ' et l'id est notationCamel pour être facilement sélectionnable.

+0

Oh oui vous avez raison, deceze. J'ai fait une grosse erreur dans ma question. Il devrait être name = "data [User] [user_id]" Merci beaucoup pour votre aide. – user327712

0

Je crois que

$("#data[User][user_id]") 

est révélateur jQuery pour rechercher l'élément avec

id="data[User][user_id]" 

, non

name="data[User][user_id]" 

Je ne sais pas si, quelqu'un me corriger?

0

Le problème est que JQuery est assez bête à propos de faire correspondre des choses qui ont des crochets dans le texte correspondant. Utilisez ce qui suit en tant que votre sélecteur:

$("[id^=data['User']['user_id']]") 

Il utilise l'opérateur de comparaison^= pour "commence par", ce qui semble fonctionner pour moi.

+0

Dites que j'ai un autre champ de texte de saisie nommé comme ceci name = "data ['User'] ['username']" L'ancien code que vous avez suggéré: $ ("[nom^= data ['User'] ['user_id ']] ") soulèvera un autre problème Lorsque j'ai déplacé ma souris sur le deuxième champ, l'alerte est apparue aussi. – user327712

Questions connexes