web-dev-qa-db-fra.com

Jquery select change

<select id="Nazione" name="Nazione">
    <option prefix='+93' value='AF' >Afghanistan </option>
    <option prefix='+355' value='AL' >Albania </option>
    <option prefix='+213' value='DZ' >Algeria </option>
    <option prefix='+376' value='AD' >Andorra .... etc
</select>

et ce js

$(document).ready(function() {  
    $('#Nazione').change(function(){

        alert( $(this).find("option:selected").attr('prefix') );
        alert( $(this).attr('prefix') );
    });
  });

J'ai alerte NULL ... POURQUOI?

14
Ste

Votre code est bon. Voici une démo: http://jsfiddle.net/hKktc/1/

La raison pour laquelle vous n'obtenez pas de valeur pour le deuxième appel d'alerte est parce que l'attribut prefix n'existe pas pour le select et n'existe que pour le option

10
JohnP

$(this) fait référence à <select> et non à l'option. L'attribut prefix n'existe pas sur le <select> 

Cela causera le problème avec le deuxième exemple.

4
James Wiseman

La 2nd alert retournera null, car <select> n'a pas d'attribut prefix.

4
DanielB

Qu'est-ce que vous attendez exactement? 

Je trouve que la deuxième alerte - alert( $(this).attr('prefix') ); est celle qui cause un problème. En l'état, vous recevez une alerte du numéro de préfixe, puis une alerte de null (provoquée par la deuxième alerte).

1
phil

Vous vouliez probablement que .val() et non .attr('prefix'), obtienne la valeur sélectionnée de <select>.

$(document).ready(function() {  
    $('#Nazione').change(function(){

        alert( $(this).find("option:selected").attr('prefix') );
        alert( $(this).val('prefix') );
    });
  });
0
vitas