web-dev-qa-db-fra.com

Le sélecteur JQuery

Je viens de commencer à utiliser jQuery pour la première fois, donc je ne sais pas si ce que je fais est correct. Ce que j'essaie de faire est très basique. J'ai un script qui ajoute un filigrane CSS aux champs de texte lors du chargement dans une vue MVC.

Pour sélectionner l'élément, procédez comme suit:

jQuery(document).ready(function(){$('#Department.DeptName').addWatermark('input-watermarked', 'test');});

Ensuite, dans mon script pour l'ajout du css watermarkclass, il échoue à l'instruction "this.val (). Length".

jQuery.fn.toggleWatermark = function(watermarkedClass, watermarkText) {
if (this.hasClass(watermarkedClass)) {
    this.removeWatermark(watermarkedClass);
}
else if (this.val().length == 0) {
    this.addClass(watermarkedClass);
    this.val(watermarkText);
}

}

Le script fonctionne bien lorsqu'un identifiant d'élément est "DepartmentDeptName", c'est comme si le sélecteur ne fonctionnait pas lorsque l'identifiant d'élément contenait un point. Est-ce que quelqu'un sait pourquoi ou comment contourner ce problème?

31
Kevin Quinn

Je pense que vous devriez échapper au point avec une double barre oblique inversée: $("#Department\\.DeptName") Voir ici .

63
Joril

Vous essayez d'accéder au #Department avec une classe DeptName. Vous devriez vous échapper avec deux barres obliques inverses (comme le disait Joril).

Voir Sélecteurs JQuery pour plus d’informations.

1
Pedro Gil

Des syntaxes alternatives telles que $("input[name='department.deptname']") fonctionneront si vous avez le contrôle sur l'écriture de jQuery. J'utilise Spring MVC avec Kendo et je n'ai donc pas accès au code jQuery. La balise Spring MVC <form> met automatiquement . partout où cela est applicable. Par exemple. si l'utilisateur a l'adresse .., la ville deviendra donc user.address.city (ou address.city). Et si je décompose Spring MVC sous de multiples formes, cela perturbe ma logique d’arrière-plan. Il disperse également ce qui aurait dû être une forme unique. Une autre alternative consiste à aplatir l'objet User sur le back-end ... encore une fois, pas très propre. Je ne suis pas sûr, mais Dojo a travaillé dans un tel scénario.

0
Ray