2017-10-07 33 views
0

我试过parseInt()无济于事。我仍然可以使用此代码NaN的错误...jQuery .val()不能使用parseInt转换为Int

$("#belt-length").on("input", function(){ 
 
\t \t \t var length = parseInt($("#belt-length").val(), 10); 
 
\t \t \t var width = parseInt($("#belt-width").val(), 10); 
 
\t \t \t if(length > 0 && width > 0) { 
 
\t \t \t \t var squaremm = length * width; 
 
\t \t \t \t var square = squaremm/1000000; 
 
\t \t \t \t $("#belt-square-meters").html(square.toString() + "m<sup>2</sup>"); 
 
\t \t \t } else { 
 
\t \t \t \t $("#belt-square-meters").html("0.00 m<sup>2</sup>"); 
 
\t \t \t }; 
 
\t \t }); 
 
\t \t $("#belt-width").on("input", function(){ 
 
\t \t \t var length = parseInt($("#belt-length").val(), 10); 
 
\t \t \t var width = parseInt($("#belt-width").val(), 10); 
 
\t \t \t if(length > 0 && width > 0) { 
 
\t \t \t \t var squaremm = length * width; 
 
\t \t \t \t var square = squaremm/1000000; 
 
\t \t \t \t $("#belt-square-meters").html(square.toString() + "m<sup>2</sup>"); 
 
\t \t \t } else { 
 
\t \t \t \t $("#belt-square-meters").html("0.00 m<sup>2</sup>"); 
 
\t \t \t }; 
 
\t \t });

我曾尝试转换领域type="number"。我使用.val()方法,因为我的理解是.val()将拉取表单字段的实际值,而不是对表单字段的对象引用。

+0

您还没有为他们'.VAL()'你正在试图获得该领域的HTML代码。但它看起来可以有一个非数值的值,这会导致'parseInt'返回'NaN'。常见的回退方式是使用'||'运算符:'parseInt(...)|| 0' – janos

+0

你的代码[在这里工作!](https://jsfiddle.net/hdLpxupf/) – lshettyl

回答

0

1.当然,您可以通过parseInt.val()结果转换为integert。 parseInt方法接受字符串作为第一个参数(MDN. parseInt),而.val()返回文本输入大小写(W3Schools. Input Text value Property)中字符串的“FIRST匹配元素的值属性的值”(W3Schools. jQuery val() Method)。所以你的代码没有问题,你的NaN保护在这里很常见。

2.我建议做一些重构。提取您处理成一个单一的功能,并简化输出:

function processInput() { 
    var length = parseInt($("#belt-length").val(), 10); 
    var width = parseInt($("#belt-width").val(), 10); 
    var square = '0.00'; 
    if(length > 0 && width > 0) { 
     var squaremm = length * width; 
     square = squaremm/1000000; 
    } 
    $("#belt-square-meters").html(square + "m<sup>2</sup>"); 
} 

$("#belt-length").on("input", processInput); 
$("#belt-width").on("input", processInput); 

DEMO:https://plnkr.co/edit/D5YcsQGJzqqIUbou0rxI?p=info