2013-08-05 18 views
6

W poniższym kodzie próbuję zadzwonić pod numer valueAsNumber, ale otrzymuję komunikat NaN. Kiedy używam parseInt, otrzymuję wynik, którego oczekuję. Dlaczego to?Dlaczego "wartośćAsNumber" zwraca wartość NaN jako wartość?

<html>                                                  
<head>                                                  
<title>JavaScript: Demo 1</title>                                           
<link rel="stylesheet" type="text/css" href="index.css">                                     
</head>                                                  

<body>                                                  
<div id="numbers">                                               
    <div id="inputs">                                               
    <form name="inputForm">                                             
    <div class="prompt">Number 1: <input name="number1" type="text"></div>                                 
    <div class="prompt">Number 2: <input name="number2" type="text"></div>                                 
    </form>                                                 
    </div>                                                 
    <div id="result">                                               
    <div class="prompt">RESULT: <span id="operation_result">&nbsp;</span></div>                                
    </div>                                                 
</div>                                                  
<div id="operations">                                              
<p><a id="add_link" href="#" onClick="add(this)">ADD</a></p>                                    
</div>                                                  

<script type="text/javascript">                                            
    function add(linkElement){                                            
    // var value1 = parseInt(document.inputForm.number1.value); 
    // var value2 = parseInt(document.inputForm.number2.value); 

    var value1 = document.inputForm.number1.valueAsNumber; 
    var value2 = document.inputForm.number2.valueAsNumber;                                    
    var result = value1 + value1;                                           

    document.getElementById('operation_result').innerHTML = result;                                   
    }                                                   
</script>                                                 

</body>                                                  
</html>                                                  

Odpowiedz

10

Twoje oczekiwania są rozsądne biorąc pod uwagę nazwę właściwości, ale czytając rzeczywistej specs/documentation:

Atrybut valueAsNumber IDL reprezentuje wartość elementu, interpretowane jako liczby.

Po otrzymaniu, jeśli atrybut wartośćAsNumber nie ma zastosowania, zgodnie z definicją dla bieżącego stanu atrybutu elementu wejściowego, należy zwrócić wartość Nie-a-Number (NaN) na wartość .

Here's a table tej listy za type s, które mają zastosowanie do valueAsNumber. Są to:

Data i godzina,
Data,
Miesiąc,
Tydzień,
Czas
lokalna data i godzina,
Ilość
Zakres

Tak to dość dziwne decyzja API

+0

czyli wciąż powracający NaN. Wypróbowany typ = liczba w oknach 10. – VISHMAY

3

Musisz ustawić type twoich input do number:

<input name="number1" type="number"> 

Ponadto, jeśli wartość jest pusta lub nie-numeryczne, będzie to powrót NaN.

+0

Uważaj, to nadal nie działa na krawędzi: https://stackoverflow.com/questions/34251265/on-an-inputtype-number-ed ge-always-return-nan-for-valueasnumber –

Powiązane problemy