jQuery(this).val() ne retourne pas la valeur de l'option sélectionnée
J'ai le script suivant à la fin de ma page:
<script type="text/javascript">
jQuery.noConflict();
jQuery(function() {
jQuery('#optElem').change(function(){
jQuery.post('http://example.com', { 'id1': 1, id2 : jQuery(this).val() },
function(data){
jQuery('#abc').html(data.payload);
jQuery('#abc').effect("highlight", {}, 3000);
}, "json");
});
});
</script>
J'ai une option sur le terrain avec l'id 'optElem'. Le code ci-dessus est censé être déclenchée sur le changement de l'événement, et aussi j'ai envie de passer à la valeur de l'option sélectionnée pour le gestionnaire de rappel.
L'événement change est correctement déclenché et capturé par jQuery, cependant, j'obtiens une valeur vide pour id2 (ce qui est censé être la valeur de l'élément sélectionné).
Je suis à l'aide de JQuery(this).val() - mais qui est curieusement, en retournant une valeur vide - quelqu'un sait pourquoi?
L'option sélectionner le champ dans le code HTML ressemble aime ceci:
<div>
<div>
<span id="yearElem">Year: </span><span id="optElem">
<select>
<option value="2010">2010</option>
<option value="2009">2009</option>
</select>
</span>
</div>
</div>
OriginalL'auteur Stick it to THE MAN | 2010-01-03
Vous devez vous connecter pour publier un commentaire.
C'est parce que
optElem
est un<span>
, pas un<select>
. Vous êtes à la fixation de l'événement de changement de la durée, et comme un résultat,this
se réfère à la durée lorsque vous êtes à l'intérieur de la fonction attachée à changer.Depuis
this
est la durée, il n'a pas de valeur associée.Votre meilleur pari est de donner à l'
<select>
un id, et de fixer le changement de fonction à la place. Il fait beaucoup plus de sens à l'événement de changement de être associée avec laselect
plutôt qu'unspan
.OriginalL'auteur zombat
La
val()
ne fonctionne que sur HTML entrée éléments (input
,select
,textarea
,button
). Vous devez déplacer lesid="optElem"
à la<select>
élément et il va fonctionner.OriginalL'auteur BalusC
Essayer de changer la ligne 4:
Cela vous fera travailler sur sélectionnez un élément à l'intérieur de la #optElement.
(voir aussi la réponse par BalusC, vous avez besoin de travailler sur un élément select, pas une travée)
OriginalL'auteur Emil Vikström
Oui! vous devez vous concentrer sur le "Select" élément
en faisant cela!
OriginalL'auteur Joberror
Ok, c'est une erreur que beaucoup d'entre nous ont fait. @BalusC a déclaré, jQuery
val()
ne fonctionne qu'avec les éléments d'entrée(input, select, textarea, bouton). Parce que des éléments comme la div, span, etc. n'ont pasvalue
attributs, il semble que jQuery a décidé de ne pas prendre en charge cette fonction avec les autres. Supposons maintenant que nous avons cette ul avec quelques li:Donc ce dont nous avons besoin est la valeur de la
value
attribut. Comme dit plus tôt,val()
ne fonctionne pas en raison de l'évidence de la raison. Mais pourquoi on a toujours 0 dans le second cas. Ne devrait pasattr('attributename')
retour de la vraie valeur de l'attribut spécifié? Haha, le problème est, il semble jquery devient confus lorsque le nom de l'attribut estvalue
, c'est pourquoi elle retourne 0. Si nous devions changer le html ci-dessus comme ceci:et de demander la valeur de
value1
attribut, nous pouvons obtenir la valeur réelle.Enfin, voici une autre configuration:
Maintenant voir ce qui se passe:
La différence entre le dernier et l'avant 2 html, c'est que, dans la dernière, la valeur de la
value
attribut est une valeur numérique, alors que dans les précédentes, c'est une valeur alphanumérique. Pour une raison que jQuery est très bien lorsqu'une coutumevalue
attribut a une valeur numérique et se comporte comme si elle traite avec une entrée comme élément. Je me sentais un peu paresseux pour trouver la raison derrière elle. Donc, si vous êtes curieux, allez explorer le jquery, le code source. Avoir un beau script.OriginalL'auteur Mikayil Abdullayev