Comment comparer jQuery val() et la valeur JavaScript
Quand je fais la comparaison suivante je obtenir de faux bien que les deux val() et la valeur visuellement afficher la même valeur:12
if ($(this).val() == txt.value)//returns false
Quand j'alerte à la fois $(this).val (), et txt.valeur-je obtenir 12. L'un d'eux est une chaîne de caractères et l'autre un int? Si oui, lequel est ce?
Quel type de nœud ne s'agit-il, et comment êtes-vous définir txt?
J'ai un select et une entrée de l'élément de texte. Je compare la txt.de la valeur à chacune des valeurs de l'option dans le select. Je reçois valeur de l'option avec $(this).val() et la valeur de la zone de texte txt.de la valeur. Notez que cette opération est effectuée à l'intérieur de $.chaque.
vous pouvez exécuter une simple démo sur JSFiddle?
J'ai essayé de faire une démo, mais je ne peux pas ajouter quoi que ce soit au format html volet dans JSFiddle
J'ai un select et une entrée de l'élément de texte. Je compare la txt.de la valeur à chacune des valeurs de l'option dans le select. Je reçois valeur de l'option avec $(this).val() et la valeur de la zone de texte txt.de la valeur. Notez que cette opération est effectuée à l'intérieur de $.chaque.
vous pouvez exécuter une simple démo sur JSFiddle?
J'ai essayé de faire une démo, mais je ne peux pas ajouter quoi que ce soit au format html volet dans JSFiddle
OriginalL'auteur Mikayil Abdullayev | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Faire un
typeof
de connaître le type de vos valeurs.jQuery pourrait avoir modifié les valeurs lors de l'utilisation de
.val()
comme garniture des espaces qui doivent être présentes. Pour vous en assurer, vous pouvez éviter d'utiliserval()
.La
this
dans.each()
ainsi que le deuxième argument est l'élément du DOM par itération. Vous pourriez obtenir la valeur dedirectement:
Lors de l'utilisation de lâche comparaison (
==
), le nombre de 12 et de chaîne de 12 doit être le même. Encore plus surprenant, c'est que c'est vrai, même avec la chaîne ayant des espaces autour d'elle. Mais avec une comparaison stricte (===
), ils ne devraient pas être:À ce stade, nous avons enlevé tous les pensable de pièges. Si aucune n'a fonctionné, les deux peuvent être totalement différentes valeurs de la première place.
"12" == 12 // true; testé sur Chrome 23
Désolé les gars, j'ai réalisé que le problème n'était pas que les valeurs ne correspondent pas, mais parce que j'essayais de retour de la fonction, si la condition est vrai. La condition est vrai, mais de toute façon le code continue après la sortie de l' $.chaque boucle.
jQuery permettra de ne pas découper les espaces lors de l'appel
.val()
, mais remplacera/\r/g
avec''
, ou retourner une valeur null comme''
OriginalL'auteur Joseph
Je me sens obligé d'écrire des commentaires, que je trouve très utile, après avoir pris autant de temps, des gars ici. Donc mon problème était:
Bien que le résultat de la condition $(this).val() == txt.la valeur est true, le code après chaque tour de boucle encore exécutée. C'est pourquoi j'ai pensé que les deux valeurs ne correspondent pas. Mais si
J'ai mis une alerte à l'intérieur de cette condition, il a montré jusqu'à. Il signifie quelque chose de mauvais était avec le comportement de "retour" à l'intérieur de chaque boucle. J'ai récemment fini par comprendre que bien que le retour arrête l'exécution du code après lui-même à l'intérieur de chaque boucle, il n'empêche pas le code de s'exécuter après chaque bloc. Ainsi, pour atteindre le plein retour de la fonction à l'intérieur de l'jquery chaque tour de boucle il semble que nous avons à mettre un drapeau et de décider si de revenir après le chacun selon cet indicateur. Le code suivant a fonctionné pour moi:
Note return(false) à l'intérieur de l'itération. Ce que cela signifie est que, si la condition est vraie continuer itération rien de plus et de sortir de la boucle.
OriginalL'auteur Mikayil Abdullayev