2009-10-08 4 views
14

j'ai une boîte de sélection:Obtenir la valeur d'une boîte SELECT dans Internet Explorer

<select id="item1" name="Item 1"> 
    <option> </option> 
    <option> Camera </option> 
    <option> Microphone </option> 
    <option> Tripod </option> 
</select> 

Je cette JavaScript:

var item1= document.getElementById("item1").value; 

item1 montre toujours vide, jamais l'option sélectionnée. Cependant, cela fonctionne dans .

Répondre

23

L'utilisation de item.value fonctionne pour tous les navigateurs sauf très très anciens (Netscape 4 anyone?). La raison pour laquelle cela ne fonctionne pas dans ce cas est que vous n'avez aucun attribut de valeur dans les options. Vous devez déclarer la valeur pour chaque attribut. Ce que vous avez actuellement est seulement une propriété "text", qui par défaut est value quand aucune valeur n'est déclarée. Alternativement, vous pouvez pousser du code dans l'événement window onload pour que la valeur de chacune de ces options soit identique à "text".

Une troisième façon, vous pouvez utiliser le code ci-dessous, qui est la voie ancienne:

var s = document.getElementById('item1'); 
var item1 = s.options[s.selectedIndex].value; 
+0

oups, cela ne fonctionne pas dans IE 6, mais dans IE 8 :( – bmw0128

+0

Devrait fonctionner correctement dans IE6 - quelle erreur obtenez-vous? – Greg

+1

aucune erreur en soi, j'ai un contrôle qui vérifie une valeur, et la valeur n'est jamais là – bmw0128

3

Comme un additif pour répondre # 1, faites attention que < sélectionnez> .selectedIndex peut être -1 certains times qui lèveront une exception une fois passés en < select> .options [n]. En tant que tel, vous voudrez peut-être faire un test do rapide:

var s = document.getElementById('item1'); 
var item = (-1 != s.selectedIndex)? 
       s.options[s.selectedIndex] : null; 

EDIT

commentaire de

par Tim, s.selectedIndex peut être -1 si vous définissez via JavaScript ou vous créer un vide < sélectionnez > boîte.

+0

Savez-vous quand 'selectedIndex' peut être -1? Je n'ai jamais vu ça. –

+0

La seule méthode 'selectedIndex' peut être -1 si vous l'avez explicitement définie sur -1 via JavaScript. –

+0

Cependant, j'ai downvoted trop hâtivement et maintenant je ne peux pas l'enlever sauf si vous éditez. Pardon. –

14

Étant donné que vos balises d'option ne possèdent pas l'attribut «valeur», IE6 et IE7 vous renvoient une chaîne vide. Vous devriez lire la valeur du champ « texte » de l'objet d'options comme ceci:

var item1 = s.options[s.selectedIndex].text; 

à Item1 vous aurez la valeur dont vous avez besoin sans casser la compatibilité avec Firefox et IE 8.

1

code pour obtenir un columnName vaiable dans la zone SELECT appelée layerDetails.styleColumn (balise SELECT a le même nom et Id), qui fonctionne sur tous les navigateurs ...

var columnName = document.getElementsByName('layerDetails.styleColumn')[0].value; 
if (columnName == null || columnName == '') 
    { 
    columnName = document.getElementById('layerDetails.styleColumn').value; 
    } 

if (columnName == null || columnName == '') 
    { 
    var select = document.getElementById('layerDetails.styleColumn'); 
    columnName= select.options[select.selectedIndex].value; 
    if (columnName == null || columnName == '') 
    { 
    columnName= select.options[select.selectedIndex].text; 
    } 
    } 
Questions connexes