2016-06-16 12 views
5

Mam formularz z przyciskami radia:błąd JavaScript NaN w programie Internet Explorer

<ul class='likert'> 
    <li> 
    <input type="radio" name="q1" value=5 required> 
    </li> 
    <li> 
    <input type="radio" name="q1" value=4> 
    </li> 
    <li> 
    <input type="radio" name="q1" value=3 checked="checked"> 
    </li> 
    <li> 
    <input type="radio" name="q1" value=2> 
    </li> 
    <li> 
    <input type="radio" name="q1" value=1> 
    </li> 
</ul> 

w Firefox i Chrome,

parseInt(document.forms["question_form"]["q1"].value) 

zwraca 3 (lub cokolwiek), ale w programie Internet Explorer I get „NaN ".

(Przepraszam jeśli pytam to źle, jestem tu nowy ...)

+2

, która wersja IE – Andrei

+0

również prawdopodobnie nie powinien być za pomocą formularzy. spojrzeć na ten [post] (http://stackoverflow.com/a/5590787/5523033) – Andrei

+3

IE wydaje się zwracać HTMLCollection od 'document.forms [ "question_form"] [ "Q1"]', ponieważ nazwy nie są wyjątkowe. Zwrócona kolekcja nie ma właściwości "value". – Teemu

Odpowiedz

5

IE zwraca HTMLCollection gdy nazwy nie są unikalne w document.forms["question_form"]["q1"].

Zobacz Uwagi na IHTMLElementCollection

„Jeśli zostaną znalezione zduplikowane nazwy, zbiór tych wymienionych elementów jest zwracany.”

można uzyskać sprawdzana wartość na przykład tak:

var val = document.querySelector('.likert input:checked').value); 
+3

Co rażące naruszenie [DOM postaci namedItem] (https://www.w3.org/TR/html5/forms.html#dom-form-nameditem). powinien zwrócić [RadioNodeList] (https://www.w3.org/TR/html5/infrastructure.html#radionodelist) gromadzenia, które w [Wartość] (https://www.w3.org/TR/html5 /infrastructure.html#dom-radionodelist-value). – Oriol

1

dla nowoczesnej przeglądarki, czystym rozwiązaniem js jest:

document.querySelector('input:checked').value; 

Jeśli można użyć jQuery, to nieco bardziej proste i eleganckie:

$("input:checked").val(); 
Powiązane problemy