Je peux trouver mon élément select par son nom, mais je ne parviens pas à trouver la valeur sélectionnée qui lui est associée.
Voici mon code ci-dessous:
<select name="a[b]" onchange='mySelectHandler("a[b]")'>
<option value='Choice 1'>Choice 1</option>
<option value='Choice 2'>Choice 2</option>
</select>
puis, dans mon gestionnaire, j'utilise:
function mySelectHandler(name){
var mySelect = $('select[name=' + name)
// try to get selected value
// alert ("selected " + mySelect.val())
console.log("object "+ mySelect.toSource());
}
Le résultat de mon impression dans le journal est:
objet ({longueur: 0, prevObject: {0: ({}), contexte: ({}), longueur: 1}, contexte: ({}), sélecteur: "select [nom = a [b]"})
Des idées sur la façon de faire cela?
Votre sélecteur est un peu éteint, il manque le ]
final
var mySelect = $('select[name=' + name + ']')
vous devrez peut-être aussi mettre des guillemets autour du nom, comme ceci:
var mySelect = $('select[name="' + name + '"]')
Essaye ça:
$('select[name="' + name + '"] option:selected').val();
Cela va obtenir la valeur sélectionnée de votre menu.
Supprimer l'événement onchange
de la balise HTML et le lier à votre événement de préparation de document
<select name="a[b]" >
<option value='Choice 1'>Choice 1</option>
<option value='Choice 2'>Choice 2</option>
</select>
et script
$(function(){
$("select[name='a[b]']").change(function(){
alert($(this).val());
});
});
Échantillon de travail: http://jsfiddle.net/gLaR8/3/
Pour ajouter des réponses ici, assurez-vous qu'il n'y a pas d'espace entre select
et [name...
Faux:
'select [name=' + name + ']'
^
Droite:
'select[name=' + name + ']'
ou vous pouvez simplement faire
$('select[name=a[b]] option:selected').val()
au lieu de
mySelect.toSource()
utilisation
mySelect.val()
La réponse de MrOBrian montre pourquoi votre code actuel ne fonctionne pas, avec les ]
et les guillemets manquants, mais voici un moyen plus simple de le faire fonctionner:
onchange='mySelectHandler(this)'
Et alors:
function mySelectHandler(el){
var mySelect = $(el)
// get selected value
alert ("selected " + mySelect.val())
}
Ou mieux encore, supprimez complètement le gestionnaire d'événements en ligne et liez-le avec jQuery:
$('select[name="a[b]"]').change(function() {
var mySelect = $(this);
alert("selected " mySelect.val());
});
Ce dernier doit être dans un gestionnaire document.ready ou dans un bloc de script qui apparaît après l'élément select. Si vous souhaitez exécuter la même fonction pour d'autres sélections, il suffit de changer le sélecteur pour que quelque chose s'applique à tous, par exemple, all selects serait $('select')
, ou tous ceux d'une classe particulière seraient $('select.someClass')
.
Essayez ceci pour obtenir la valeur de l'élément sélectionné par son nom.
$("select[name=elementnamehere]").val();