2012-07-31 21 views
1

我已經在很多例子中看到了JavaScript的這一點,但我無法得到這個爲我工作。我必須忽視的東西,所以我將不勝感激有種靈魂幫助我在這裏,因爲我是新來的JavaScript:只有當我輸入引號時,爲什麼isNaN對於字符串的表單輸入爲真?

spend=eval(form.spend.value); 
if(isNaN(form.spend.value)) { 
    alert('I am not a number'); 
} 

以上形式的輸入是從收集:

<input type=text name=spend value="" size=6 STYLE="background-color: #EDEDE8;"> 

如果我進入abc作爲輸入,警報我不是一個數字不顯示。如果我輸入帶有引號的「abc」,它會顯示警報。

我檢查輸入的形式,只允許用戶輸入數字。只有數字應該被接受。謝謝!

編輯:花費是美元金額。所以它需要能夠接受數量如123.45。編輯2:對不起,num確實是form.spend.value。

+1

您應該使用[parseInt函數(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt)或[parseFloat](https://developer.mozilla.org/en/的JavaScript /參考/ Global_Objects/parseFloa t),而不是'eval'。 – 2012-07-31 09:15:31

+1

@JamesMcLaughlin:或者(通常更合適)'Number(form.spend.value)'。 – Jon 2012-07-31 09:16:26

+0

感謝您的回覆,詹姆斯。對不起,我應該提到的數字是美元金額(美國),如123.45。那麼不會parseInt去掉兩位小數嗎?謝謝! – 2012-07-31 09:16:52

回答

0

如果我輸入abc作爲輸入,警報我不是數字不會顯示。如果我輸入帶有引號的「abc」,它會顯示警報。

這是因爲腳本錯誤並在到達警報之前死亡。

> var form = { spend: { value: 'abc' } }; 
> spend=eval(form.spend.value); 
ReferenceError: abc is not defined 

如果該值過圍繞它(即'"abc"')報價,則它會被作爲一個字符串文字,而不是一個變量進行評價。

你不應該把eval放在靠近用戶輸入的地方。只要刪除該行。

+0

num是我的錯,我在上面糾正了它。它應該是form.spend.value代替num。 – 2012-07-31 09:21:04

+0

@ Edward_178118 - 同樣的問題,它只是在eval線上。 – Quentin 2012-07-31 09:22:46

1

檢查此代碼,其工作。
JS:

function abc(){ 
var aa = document.getElementById('myid').value; 
if(isNaN(aa)) { 
alert('I am not a number'); 
} 
} 

形式:

<input type=text name=spend value="" id="myid" size=6 STYLE="background-color: #EDEDE8;"> 
    <input type="button" onClick="abc();"> 
+0

感謝您的回覆。因此,最好在輸入行上使用id =,並使用cument.getElementById而不是簡單地依賴名稱=花費? document.getElementById是否以不同的方式處理表單輸入數據?謝謝! – 2012-07-31 09:28:46

+0

@ Edward_178118 - 這裏的重要區別在於'eval'行已被丟棄(正如我和Alvin的回答中所解釋的) – Quentin 2012-07-31 09:30:52

+0

當您想從單個輸入字段獲取數據時,您可以使用id,因爲id是唯一的,您可以不給相同的ID來區分輸入字段。並且名稱不是唯一的屬性,您可以爲多個輸入字段賦予相同的名稱。通常名稱用於複選框或單選按鈕等。 – 2012-07-31 09:33:50

1

因爲這不是處理數字的正確方法。

spend=eval(form.spend.value); // Problem is on this line 
if(isNaN(form.spend.value)) { 
    alert('I am not a number'); 
} 

如果有人進入在form.spend.value例如像alert("foolish")你會出人意料地看到它正在執行的東西,像eval("alert(\"foolish\")")

如果是像this_is_an_undefined_variable_name它拋出一個錯誤並終止腳本,這就是爲什麼你贏了看不到警報。

如果它是類似於"hihi",因爲這是一個有效的JavaScript 字符串沒有錯誤被引發,你會看到警報。

就像James McLaughlin指出的那樣,您應該使用正確的函數來處理數字。


順便說應該是更好地正確地寫你的HTML(引用屬性):

<input type="text" name="spend" id="spend" value="" size="6" STYLE="background-color: #EDEDE8;"> 

,並使用更好的方式來獲取表單(使用document.getElementsByName也未嘗不可):

spend=parseFloat(document.getElementById("spend").value); 
// OR 
spend=parseFloat(document.getElementsByName("spend")[0].value); 

if(isNaN(spend)) { 
    alert('I am not a number'); 
} 
相關問題