我正在使用PhoneGap构建一个Android应用程序。我从数字输入中获取值几次,一切正常,但在某一时刻它表现得很奇怪:
我从数字输入中获取值并将其解析为整数 - 一切正常。但是当我将这些值加倍时,它会给我一个值+ NaN NaN NaN - 它看起来像这样:
var d1;
var d2;
var d3;
d1 = parseInt($('input.inputOne').val());
d2 = parseInt($('input.inputtwo').val());
d3 = ((d1*d2)/10000).toFixed(2);
在控制台中它给了我值:
d1
100
d2
200
d3
2.00NaN NaN NaN
但是如果我将d3放入某些DOM元素中,它只会给我
NaN
我之前在这个应用程序中做过类似的事情,一切都很好 - 我不知道为什么在这个特殊情况下它不起作用 - 有什么建议吗?
编辑:
有趣的事 - 即使我这样做。
d3 = d2;
它给了我
d3
200NaN NaN NaN
编辑2:
更有趣的东西 - 如果我不解析从输入(d1和d2)取得的int值,乘法后它给了我:
d3
2.00undefined undefined NaN
答案 0 :(得分:1)
我确切地知道这里的问题是什么。 在从输入元素获取值之前,您忘记了验证。 我为你创建了一个演示小提琴。你可以看看它。 如果您将input元素中的值更改为非数字的值(如“abc”);当你试图解析它浮动时:它会给你NaN的错误..因为它是“不是数字”。我希望这有帮助。 http://jsfiddle.net/rahulkhadse/CNB2t/28/
另外,要验证数字的输入值,您可以参考以下内容:
http://www.texotela.co.uk/code/jquery/numeric/
或者您可以使用“onkeyup”事件并检查用户在输入框中输入的值类型。
P.S:关于jsFiddle的代码: -
$(document).ready(function () {
// Handler for .ready() called.
var myVar = $("#validate_info").find('.inputOne').val();
console.log(myVar);
var output1 = $('input.inputOne').val();
console.log(output1);
var output2 = $('input.inputTwo').val();
console.log(output2);
$('#result').html(output1);
// Starts
var d1;
var d2;
var d3;
d1 = parseFloat($('input.inputOne').val());
d2 = parseFloat($('input.inputTwo').val());
d3 = ((d1 * d2) / 10000).toFixed(2);
console.log(" With parseFloat d1:" + d1 + ", d2:" + d2 + ", d3/result:" + d3);
d1 = parseInt($('input.inputOne').val());
d2 = parseInt($('input.inputTwo').val());
d3 = ((d1 * d2) / 10000).toFixed(2);
console.log(" With parseInt d1:" + d1 + ", d2:" + d2 + ", d3/result:" + d3);
});
<div id="validate_info">
<input id="id1" type="text" class="inputOne" value="100" name="abc">
<input id="id2" type="text" class="inputTwo" value="200" name="abcef">
</div>
<br>
<div id="result"></div>
答案 1 :(得分:0)
最后我明白了 - 与此同时,在我完成所有数学运算的时刻和我将结果放入DOM的时间之后我在那些数字输入上做空() - 当我停止它然后它做数学很好(没有乘法错误等) - 我觉得很奇怪因为我认为如果我做归因并且在我删除源输入之后它不应该影响那些带输入的变量值。