我有一个文本框,可能是空白或数字(非数字字符在之前的关头验证)。
当我使用intParse()时,我的整数输出为NaN。
HTML:
<input type="text" id="textbox" value=""/>
<button>Input number or leave blank to test</button>
jQuery的:
$('button').click(function() {
//Check normal value...
var $textboxvalue = $('#textbox').val();
alert("#textbox=" + $textboxvalue);
//If no value, set as 0 to avoid Nan for intParse...
var $textbox;
if ($('#textbox').val()) {
$textbox = $('#textbox').val();
}
else{
$textbox = 0;
}
alert("$textbox=" + $textbox);
//Parse integer...
var $textboxParsed = parseInt($($textbox).val(), 10);
alert("$textboxParsed=" + $textboxParsed);
//Subsequent action...
var $textboxPlus5 = $textboxParsed + 5;
alert("$textboxPlus5=" + $textboxPlus5);
});
的jsfiddle: https://jsfiddle.net/f4n6rz1p/1/
为什么intParse()产生NaN并且我是否正确有条件地将空白输入更改为零以避免Nan为intParse()?
答案 0 :(得分:4)
我认为应该是:
var $textboxParsed = parseInt($textbox , 10);
而不是:
var $textboxParsed = parseInt($($textbox).val(), 10);
编辑:我添加了理性,为什么应该在评论中完成上述操作。进一步思考,您可以简化代码:
var $textboxvalue = $('#textbox').val();
$textbox = '' === $textboxvalue ? 0 : parseInt($textboxvalue);
这是假设您的输入值为空(即空字符串,没有空格)或数字整数值。
答案 1 :(得分:3)
在此代码中,您将$textbox
设置为文本框的值(或0):
var $textbox;
if ($('#textbox').val()) {
$textbox = $('#textbox').val();
}
else{
$textbox = 0;
}
然后你要解析一个额外的$(...).val()
:
var $textboxParsed = parseInt($($textbox).val(), 10);
// Here ----------------------^^--------^^^^^^^
此时,由于$textbox
的文本框中包含值,这意味着您要求jQuery根据该值创建jQuery对象。该jQuery对象可能没有任何元素,因为搜索(例如)$("123")
将找不到任何东西。因此,当您在其上调用val
时,您会得到undefined
,因为空jQuery集上的val
会为您提供undefined
。然后parseInt
然后将undefined
转换为字符串"undefined"
,然后再尝试解析它 - 然后为您提供NaN
。
您不希望$(...)
或第二次.val
来电:
var $textboxParsed = parseInt($textbox, 10);
附注:如果您想将0
用于空文本框,可以使用JavaScript's curiously-powerful ||
operator使其更简洁:
var $textbox = $('#textbox').val() || 0;
$textbox
如果不是空白,则会以文本框中的值结束,如果为空,则为0
。
(或者使用"0"
,因为您稍后会解析它,但是对已经是数字的内容调用parseInt
是无害的。)