我正在使用一个函数,其中有一个readonly
文本 input
,当我执行函数时,我希望数字值加1。假设我有60,当我执行该函数时,返回的数字应为61。
但是实际上它输出的是601,这只是将数字1添加到字符串中。你知道发生了什么吗?减法、乘法和除法都正常工作。下面是代码片段:
var num= $("#originalnum").val() + 1;
$("#originalnum").val(num);
是的,我尝试了几种不同的变化,我错过了什么吗?
我正在使用一个函数,其中有一个readonly
文本 input
,当我执行函数时,我希望数字值加1。假设我有60,当我执行该函数时,返回的数字应为61。
但是实际上它输出的是601,这只是将数字1添加到字符串中。你知道发生了什么吗?减法、乘法和除法都正常工作。下面是代码片段:
var num= $("#originalnum").val() + 1;
$("#originalnum").val(num);
是的,我尝试了几种不同的变化,我错过了什么吗?
+
就足以将字符串转换为数字。var num = +$("#originalnum").val() + 1;
$("#originalnum").val(num);
问题在于.val()
返回的是元素的值作为字符串,当你在字符串上使用+
操作符时它会进行字符串连接。你需要先将值转换为数字:
问题在于.val()
返回的是元素的值作为字符串,当你在字符串上使用+
操作符时它会进行字符串连接。你需要先将值转换为数字:
var num = +$("#originalnum").val() + 1; // unary plus operator
// OR
var num = Number($("#originalnum").val()) + 1; // Number()
// OR
var num= parseFloat($("#originalnum").val()) + 1; // parseFloat()
// OR
var num= parseInt($("#originalnum").val(),10) + 1; // parseInt()
请注意,如果您使用parseInt()
函数,则必须将基数(10)作为第二个参数包括进去,否则(取决于浏览器),带前导零的字符串将被视为八进制,带前缀"0x"
的字符串将被视为十六进制。另请注意,parseInt()
会忽略字符串末尾的任何非数字字符,包括用户可能意图用作小数点的句点,因此parseInt("123.45aasdf", 10)
返回123
。同样,parseFloat()
也会忽略字符串末尾的非数字字符。*
、/
或-
运算符时,JS会尝试自动将字符串转换为数字,所以这就是为什么这些运算符“能够工作”的原因(假设字符串可以被转换)。parseInt
函数,并确保该值为数字(使用isNaN函数):var val = $("#originalnum").val();
var num = 0;
if ( !isNaN(val) )
num= parseInt(val) + 1;
+
是字符串的有效运算符,所以类型不会被转换(并且字符串会被连接)。 - jahroyparseInt()
函数:var num= parseInt($("#originalnum").val(),10) + 1;
.val()
默认将结果视为字符串)。$("#originalnum").val(function() {
$(this).val(parseInt($(this).val()) + 1)
});
<input type="number">
:-) - Bergi