Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;“试着……抓住”;无法使用parseInt()的块_Javascript - Fatal编程技术网

Javascript &引用;“试着……抓住”;无法使用parseInt()的块

Javascript &引用;“试着……抓住”;无法使用parseInt()的块,javascript,Javascript,我想做什么: 我有一个javascript程序,当点击一个按钮时,它从表单中的4个文本框中获取4个字符串,并将这些字符串输出到格式化的文本区域 function testResults(form){ var errorhandle1 = parseInt(document.myForm.Item_Code.value); var errorhandle2 = parseInt(document.myForm.Item_Cost.value); var errorhandle3 = parseIn

我想做什么:

我有一个javascript程序,当点击一个按钮时,它从表单中的4个文本框中获取4个字符串,并将这些字符串输出到格式化的文本区域

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!");
    }
}
我试图用try…catch块来完成的只是确保

document.myForm.Item_Code.value
document.myForm.Item_Cost.value
document.myForm.Quantity.value
实际上是数字

try…catch语句在我每次运行程序时都会触发,而不管我在相应的文本框中输入了什么。我将非常感谢任何和所有的洞察这一点

另外:我查看了这两个链接,无法理解我的问题。

这里的根本问题是
isNaN()
测试值是否为
NaN
。它不测试字符串是否是正确的数字。它有一些强制规则来尝试处理字符串,但这并不是它设计的目的

您可以在此处查看测试某些内容是否可以解析为有效数字的方法:

这里的好答案中的细节值得一读,但它可以归结为这样的东西,这比你需要的要多一些,但它是通用的:

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
(小写)。

在第一个代码块中

var errorhandle2 = parseInt(document.myForm.Item_Cost.Value);
var errorhandle3 = parseInt(document.myForm.Quantity.Value);
您使用的是
Value
,它应该是
Value
,区分大小写


顺便说一句,
isNaN
返回布尔值,您不必与
true

进行比较,在这里使用
try/catch
来处理如此简单但本身不会抛出的问题毫无意义。您只需使用一个直接的
if
语句,代码就会更简单,性能也会更好。我认为这里没有任何异常的必要。提示:不要根据
==true
测试布尔值。这是多余的<代码>如果(isNaN(errorhandle3)| isNaN(errorhandle2))读起来更好。谢谢你们两位的快速回复。我现在正在更改这些值。我想这是我的问题,现在尝试一下。@Fishbones-也可能是
.Value
应该是
.Value
。但是,您实际上不能在表单字段中“输入”无穷大的数:D@LeoDeng-是的,我知道-这是一个通用函数,在这里也可以使用。在此之前,他使用
parseInt
,返回一个正确的数字,或
NaN
。因此,用
isNaN检查就足够了。