2009-10-08 11 views

Odpowiedz

23

Używanie item.value działa we wszystkich przeglądarkach poza bardzo bardzo starymi (Netscape 4 anyone?). Powodem, dla którego nie działa w tym przypadku, jest brak atrybutu wartości w opcjach. Należy zadeklarować wartość dla każdego atrybutu. To, co obecnie posiadasz, jest tylko własnością "tekstową", która zwykle jest wartością domyślną, gdy żadna wartość nie jest zadeklarowana. Alternatywnie możesz nacisnąć kod w zdarzeniu onload okna, aby "wartość" każdej z tych opcji była taka sama jak "tekst".

Trzeci sposób można użyć poniższy kod, który jest staromodny sposób:

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

oops, to nie działa w IE 6, ale robi w IE 8 :( – bmw0128

+0

Powinno działać dobrze w IE6 - jaki błąd masz? – Greg

+1

bez błędu per se, mam sprawdzenie, które sprawdza wartość, a wartość nigdy nie jest dostępna – bmw0128

3

jako załącznik do odpowiedzi nr 1, należy uważać jako < wybierz> .selectedIndex może być -1 niektóre razy, które rzucają wyjątek po przejściu w < wybierz> .options [n]. Jako taka, może chcesz rób szybki test:

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

EDIT

komentarz

Per Tima, s.selectedIndex może być -1 jeśli ustawić go za pośrednictwem JavaScript lub utworzyć pusty < wybierz > pudełko.

+0

Czy wiesz, kiedy 'selectedIndex' może wynosić -1? Nigdy tego nie widziałem. –

+0

Jedynym sposobem, że 'selectedIndex' może wynosić -1, jest wyraźne ustawienie wartości -1 za pomocą JavaScript. –

+0

Jednak wycofałem się zbyt pochopnie, a teraz nie mogę go usunąć, chyba że edytujesz. Przepraszam. –

14

Ponieważ twoje tagi opcji nie mają atrybutu "wartość", IE6 i IE7 zwrócą ci pusty ciąg. Należy odczytać wartość z „tekstem” pola obiektu Option tak:

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

w Item1 będziesz mieć wartość co potrzeba bez zerwania kompatybilności z Firefox i IE 8.

1

Kod dostać vaiable columnName z pola SELECT zwane layerDetails.styleColumn (tag SELECT ma taką samą nazwę i ID), który działa we wszystkich przeglądarkach ...

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; 
    } 
    } 
Powiązane problemy