2009-04-27 17 views
7

Wyciągam wartość przez JavaScript z pola tekstowego. Jeśli pole tekstowe jest puste, zwraca NaN. Chcę zwrócić pusty ciąg, jeśli jest pusty, pusty itp.Uzyskiwanie wartości całkowitej z pola tekstowego, jak sprawdzić, czy ma wartość NaN lub zerową itd.?

Co mam zrobić? if(NAN = tb.value)?

+0

dokładniej proszę: Co to jest pole tekstowe (wejście tekstu, textarea, select listy lub co)? Żadna wartość "textbox" (pusta lub nie) zwraca NaN sama według mojej wiedzy. – KooiInc

+0

Czy pole tekstowe zwraca wartość NaN, czy najpierw analizuje wartość float/integer (co oznacza, że ​​parseFloat/Int) zwraca wartość NaN. –

+0

czy miałeś na myśli: jeśli (NAN == tb.value) // (dwa równe dla porównania) – Jay

Odpowiedz

16

Hm, coś tu jest podejrzane.

W jakiej przeglądarce pusty tekst zwraca NaN? Nigdy tego nie widziałem i nie mogę tego odtworzyć.

Wartość pola tekstowego jest w rzeczywistości ciągiem. Puste pole tekstowe zwraca pusty ciąg!

Aha, i sprawdzić, czy coś jest NaN, należy użyć:

if (isNaN(tb.value)) 
{ 
    ... 
} 

Uwaga: isNaN() -function zwraca true do wszystkiego, co nie może być analizowany jako liczba, z wyjątkiem pustych strunach. Oznacza to, że jest to dobra kontrola dla wejścia numerycznego (dużo łatwiejszy niż regexes):

if (tb.value != "" && !isNaN(tb.value)) 
{ 
    // It's a number 
    numValue = parseFloat(tb.value); 
} 
0

Jedną z rzeczy, które możesz zrobić, to sprawdzić poprawność wartości pola tekstowego i upewnić się, że pasuje do formatu akceptowanej liczby, a następnie, jeśli pasuje do formatu, wykonaj swój proces, w przeciwnym razie zwróć pusty ciąg.

Edit: To jest przykład z jakiegoś kod mam przed sobą (nie może być najlepszym wyrażenie regularne):

var anum=/(^\d+$)/; 

if (!anum.test(document.getElementById("<%=txtConceptOrderValue.ClientID %>").value)) 
{ 
    alert("Order Value must be a valid integer"); 
    document.getElementById("<%=txtConceptOrderValue.ClientID %>").focus(); 
    return false; 
} 

Edycja 2: Należy również pamiętać, że jestem przy użyciu ASP.NET, dlatego mam lekko funky sposób dostępu do pola tekstowego. W zwykłym przypadku JavaScript może nie być tak zagracony.

+0

To jest właściwie zmodyfikowane dla tej odpowiedzi.Jeśli zaznaczysz historię zmian, zobaczysz, że oryginalna część kodu sprawdzała wartości dziesiętne. Musiałem go zmodyfikować, aby działał na ints: P – TheTXI

2

Można również zrobić to w ten sposób:

var number = +input.value; 
if (input.value === "" || number != number) 
{ 
    // not a number 
} 

NaN jest równa nic, nawet sam.

jeśli nie lubią używać + przekonwertować z ciągów do numeru, należy użyć normalnego parseInt, ale należy pamiętać, aby zawsze dają podstawę

var number = parseInt(input.value, 10) 

inaczej „08” staje 0 ponieważ Javascript uważa, że ​​jest to liczba ósemkowa.

1

Zakładając, że odniesienie do pola tekstowego Wejście:

function getInteger(input) { 
    if(!input || !input.value) return ""; 

    var val = parseInt(input.value, 10); 

    if(isNaN(val)) return ""; 
    else return val; 
}