217 votes

jQuery - obtention d'un attribut personnalisé à partir de l'option sélectionnée

Étant donné les éléments suivants :

<select id="location">
    <option value="a" myTag="123">My option</option>
    <option value="b" myTag="456">My other option</option>
</select>

<input type="hidden" id="setMyTag" />

<script>
    $(function() {
        $("#location").change(function(){
            var element = $(this);
            var myTag = element.attr("myTag");

            $('#setMyTag').val(myTag);
        });
    });
</script>

Cela ne fonctionne pas...
Que dois-je faire pour que la valeur du champ caché soit mise à jour avec la valeur de myTag lorsque la sélection est modifiée. Je suppose que je dois faire quelque chose pour récupérer la valeur actuellement sélectionnée... ?

498voto

SLaks Points 391154

Vous ajoutez le gestionnaire d'événement à la section <select> élément.
Par conséquent, $(this) sera la liste déroulante elle-même, et non la sélection. <option> .

Vous devez trouver la sélection <option> comme ceci :

var option = $('option:selected', this).attr('mytag');

47voto

tvanfosson Points 268301

Essayez ça :

$(function() { 
    $("#location").change(function(){ 
        var element = $(this).find('option:selected'); 
        var myTag = element.attr("myTag"); 

        $('#setMyTag').val(myTag); 
    }); 
});

25voto

NawaMan Points 10266

C'est parce que l'élément est le "Select" et non l'"Option" dans lequel vous avez la balise personnalisée.

Essayez ça : $("#location option:selected").attr("myTag") .

J'espère que cela vous aidera.

9voto

Davide Gualano Points 5832

Essayez ça :

$("#location").change(function(){
            var element = $("option:selected", this);
            var myTag = element.attr("myTag");

            $('#setMyTag').val(myTag);
        });

Dans la fonction de rappel pour change() , this fait référence à la sélection, et non à l'option sélectionnée.

7voto

paulo Points 11

Supposons que vous ayez plusieurs sélections. Ceci peut le faire :

$('.selectClass').change(function(){
    var optionSelected = $(this).find('option:selected').attr('optionAtribute');
    alert(optionSelected);//this will show the value of the atribute of that option.
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X