2011-04-08 3 views
1

Etant donné que nous avons ce HTML:Comment récupérer une valeur d'OPTION vide si elle est vide?

<select id="my_select"> 
    <option value="1">Foo</option> 
    <option value="2">Bar</option> 
    <option value="">Bork</option> 
    <option value="3">Hey!</option> 
</select> 

La bonne façon d'obtenir le choix value serait:

var oS = document.getElementById("my_select"); 
alert(oS.options[oS.selectedIndex].value); 

Mais si la troisième option, Bork, est choisi le alert() montrera "Bork" et non "" (chaîne vide). Comment récupérer la chaîne vide?

TYIA

+0

Pouvez-vous donner une valeur à Bork? –

Répondre

7

Premièrement, ce n'est pas le cas. Pour moi, dans Chrome et IE8, votre exemple alerte une chaîne vide (jsFiddle).

Si, toutefois, aucun value n'est défini (jsFiddle), Bork est alerté. C'est, je pense, le problème auquel vous vous heurtez. C'est un comportement correct. Comme the MDC page indique,

S'il n'est pas défini, sa valeur par défaut est le contenu textuel de l'élément.

Vous pouvez cependant utiliser la méthode getAttribute, qui donne null si aucun élément sont sélectionnés (jsFiddle).

var oS = document.getElementById("my_select"); 
alert(oS.options[oS.selectedIndex].getAttribute('value')); 
+0

D'accord. Il en est de même pour moi: http://jsbin.com/iqefa3 – ryanulit

+0

alors qu'est-ce qui ne va pas avec mon exemple? – mcgrailm

+0

@mcgrailm: Je pense que vous avez mal lu. Ce que votre réponse décrit est ce qui se passe actuellement à l'OP, pas ce qu'ils veulent. –

0

alerte (document.getElementById ("my_select"). Value)

renvoie la chaîne vide, ou une valeur définie de l'option sélectionnée.

pas besoin de spécifier les options [selectedIndex]

S'il n'y a pas d'index sélectionné par défaut, la première valeur de l'option est retournée.

S'il n'y a pas d'attribut de valeur pour l'option sélectionnée,

de l'option texte est retourné dans une alerte de script dans la plupart des navigateurs,

et est envoyé au serveur (si la sélection a une nom et une action de formulaire) dans tous les navigateurs.