parseInt 不起作用
parseInt doesn't work
在我当前的源代码文本框中,值为 1。当我尝试alert(isNaN(obj.text())
时,它会返回预期的false
但是当我编写alert(a);
时解析Int之后,它会返回NaN
minus.click(function () {
var a = 1; if (!isNaN(obj.text())) a = parseInt(obj.text());
if (a > 1) a -= 1; obj.text(a);
});
问题出在哪里?
编辑:这是完整的代码:
<input type="text" class="basket-txt" value="1" />
jQuery.fn.basket = function (options) {
var defaults = {
}
options = jQuery.extend(defaults, options);
this.each(function () {
var $this = $(this);
$this.height(32).css({ 'line-height': '32px', 'font-weight': 'bold', 'width':'40px', 'text-align':'center', });
var tbl = $('<table border="0" style="border-spacing:0px;float:left;">').appendTo($this.parent());
var tr1 = $('<tr>').appendTo(tbl);
var plus = $('<div class="basket-plus">');
$('<td>').append(plus).appendTo(tr1);
$('<td>').append($this).appendTo(tr1);
var minus = $('<div class="basket-minus">');
$('<td>').append(minus).appendTo(tr1);
var tr2 = $('<tr>').appendTo(tbl);
$('<td>').appendTo(tr2);
$('<td>').appendTo(tr2).append($('<div>').addClass('add-to-basket'));
$('<td>').appendTo(tr2);
$this.keypress(function (e) { if (e.which < 48 || e.which > 57) e.preventDefault(); });
minus.click(function () {
var a = 1; if (!isNaN($this.text())) a = parseInt($this.text());
if (a > 1) a -= 1; $this.text(a);
});
plus.click(function () {
var a = 1; if (!isNaN($this.text())) a = parseInt($this.text());
if (a < 1000000) a += 1; $this.text(a);
});
});
}
实际上我知道我可以纠正代码并且它会起作用,我关心的是理解为什么 isNaN 返回 false 但 parseInt 返回 NaN
jQuery text()
方法将获取元素的所有后代文本节点,并将它们组合成一个字符串。
input
元素不能有任何类型的后代节点。它的当前值通过 value
属性公开,您可以使用 jQuery 中的 val()
方法读取该属性。
不应使用不带基数的parseInt
,尤其是在自由格式输入时。您可能会获得八进制或十六进制数据,而不是小数。
parseInt($this.val(), 10)
你得到一个<input>
的值是.val()
,而不是.text()
。
isNaN()
函数返回isNaN("")
的false
。为什么?因为当""
(空字符串)转换为数字时,它是0
.将一个非数字传递给isNaN()
,它做的第一件事就是将值强制转换为数字。
无论如何,在parseInt()
之前尝试isNaN()
是没有意义的,因为parseInt()
会告诉你什么时候它无法解析一个漂亮的整数。 但请注意,parseInt()
并不关心输入末尾是否有垃圾。
如果要在字符串是数字的有效字符串表示形式时将其转换为数字,而当字符串不是时NaN
var myNumber = +myString;
这也将接受带有小数部分和指数的数字,因此您必须将其截断为整数或检查它是否为整数:
var myNumber = +myString;
if (isNaN(myNumber))
// not a valid number
else if (myNumber !== Math.floor(myNumber))
// not an integer
else
// yaay!
minus.click(function () {
// let's parse the integer first
var num = parseInt( obj.val(), 10 );
// then later, we can check if it's NaN
if ( !isNaN(num) && num > 1 ) {
num -= 1;
obj.val(num);
}
});
实际上我知道我可以纠正代码,它会起作用,我担心的是 理解为什么 isNaN 返回 false 但 parseInt 返回 NaN
isNaN 没有按照应有的方式工作。有类型胁迫正在进行。
isNaN 将首先将值转换为数字。空字符串将转换为0
Number("") === 0; // true
0
显然不是 NaN,所以它返回 false。
parseInt 不执行类型强制,它以不同的方式解析值。
检查这个问题和其他问题以供参考。
第一个非空格字符无法转换为数字时,parseInt 返回 NaN。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- jquery中出现NaN错误.已经尝试过ParseInt,但仍然不起作用
- Javascript parseInt 函数不起作用
- parseInt 不起作用
- parseInt 不起作用,从字符串中获取数字
- getElementById 或 parseInt 不起作用
- JSON:parseInt 不起作用
- Javascript ParseInt()在Firefox中不起作用