2014-12-04 106 views
4

我想要做的事:「嘗試... catch」塊不parseInt函數()工作

我有一個JavaScript程序,一個按鈕被按下時,發生在4串4文本框,並將這些字符串輸出爲格式化的textarea。

function testResults(form){ 
var errorhandle1 = parseInt(document.myForm.Item_Code.value); 
var errorhandle2 = parseInt(document.myForm.Item_Cost.value); 
var errorhandle3 = parseInt(document.myForm.Quantity.value); 
//above variables are for error handling. 
var d = " "; 
var subtotal = parseInt(form.Item_Cost.value) * parseInt(form.Quantity.value); 
var subtotalValue = parseInt(document.myForm.Subtotal.value); 
var testVar = "Item Code: " + form.Item_Code.value + d + 
       "Item Name: " + form.Item_Name.value + d + 
       "Item Cost: " + form.Item_Cost.value + d + 
       "Quantity: " + form.Quantity.value + '\n'; 


document.myForm.myTextarea.value += testVar; 
document.myForm.Subtotal.value = parseInt(subtotal) + subtotalValue; 
document.myForm.Sales_Tax.value = document.myForm.Subtotal.value * salestax; 
document.myForm.Total.value = parseInt(document.myForm.Subtotal.value) + parseFloat(document.myForm.Sales_Tax.value); 
} 

上面的代碼工作得很好,並且完全按照我希望它爲我的程序範圍做的事情。

try { 
    if ((isNaN(errorhandle3) == true) || (isNaN(errorhandle2) == true)) { 
     throw "Error1"; 
    } 
} catch (e) { 
    if (e == "Error1") { 
     alert("Error! You must enter a number into the qty and cost fields!"); 
    } 
} 

我試圖用努力完成... catch塊只是爲了確保

document.myForm.Item_Code.value 
document.myForm.Item_Cost.value 
document.myForm.Quantity.value 

實際上是數字。

try ... catch語句會在每次運行程序時觸發,並且不關心我在相應的文本框中輸入的內容。我非常感謝任何和所有的洞察力!

另外:我看了這兩個鏈接,無法理解我的問題。 javascript parseInt return NaN for empty string http://www.w3schools.com/jsref/jsref_isnan.asp

+4

這是沒有意義在這裏使用'嘗試/ catch'周圍的東西這個簡單的通過本身扔不比較。你可以直接使用'if'語句,代碼會更簡單,性能更好。我在這裏看不到任何例外情況。 – jfriend00 2014-12-04 01:56:45

+2

提示:不要針對'== true'測試布爾值。這是多餘的; if(isNaN(errorhandle3)|| isNaN(errorhandle2))'讀得更好。 – Ryan 2014-12-04 02:00:44

+0

謝謝你們的快速回復。我現在正在改變這些。 – Fishbones 2014-12-04 02:09:11

回答

5

你的根在這裏的問題是,isNaN()測試,看看如果值是NaN。它不會測試以查看字符串是否是適當的數字。它有一些強制規則來嘗試處理字符串,但實際上並不是它的設計目的。

你可以看到的方法來測試,如果事情可以被解析成一個有效的數字在這裏:Validate decimal numbers in JavaScript - IsNumeric()

這是值得一讀的好答案有細節,但它歸結爲這樣的事情是有點多比你需要的,但通用:

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

而且,當時我們沒有理由在代碼中使用異常,所以你可以這樣做:

if (!isNumber(errorhandle3) || !(isNumber(errorhandle2)) { 
    alert("Error! You must enter a number into the qty and cost fields!"); 
} 

此外,在您的代碼中,某些.Value屬性看起來應該是.value(小寫)。

+0

我認爲這是我的問題,現在就嘗試。 – Fishbones 2014-12-04 02:06:58

+0

@Fishbones - 也許'.Value'應該是'.value'。 – jfriend00 2014-12-04 02:08:42

+0

然而,你實際上不能「輸入」一個無限數字到表單域:D – Leo 2014-12-04 02:08:58

0

在你的第一個代碼塊

var errorhandle2 = parseInt(document.myForm.Item_Cost.Value); 
var errorhandle3 = parseInt(document.myForm.Quantity.Value); 

您正在使用Value,這應該是value,這是區分大小寫的。

順便說一句,isNaN返回Boolean,你不必與true