将+1添加到只读文本输入字段的jQuery值

Dna*_*aso 10 javascript jquery

我正在使用一个函数,我有一个readonly文本input,当我执行函数时我想要数字值+ 1.所以假设我有60,当我执行函数时,返回的数字应该是61.

但它反而出现了601,这只是将数字1添加到字符串中.关于发生了什么的任何线索?减法,乘法和除法都可以正常工作.这是一个片段

 var num= $("#originalnum").val() + 1;
 $("#originalnum").val(num);
Run Code Online (Sandbox Code Playgroud)

是的,我尝试了几种不同的变化,我错过了什么?

Eri*_*ric 28

+在这种情况下,简单的一元就足以将字符串转换为数字:

var num = +$("#originalnum").val() + 1;
$("#originalnum").val(num);
Run Code Online (Sandbox Code Playgroud)


nnn*_*nnn 11

问题是.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()
Run Code Online (Sandbox Code Playgroud)

需要注意的是,如果你使用parseInt(),你必须包括基数(10)作为第二个参数,否则会(视浏览器)与八进制和字符串与领先的前导零对待字符串"0x"为十六进制.另请注意,parseInt()忽略字符串末尾的任何非数字字符,包括用户可能想要作为小数点的句点,因此parseInt("123.45aasdf",10)返回123.同样,parseFloat()忽略字符串末尾的非数字字符.

此外,如果它是用户输入的值,您应该仔细检查它实际上是一个数字,如果不是,可能会提供错误消息.

当您使用*,/-运算符JS尝试自动将字符串转换为数字时,这就是这些运算符"工作"的原因(假设字符串可以转换).


Kir*_*lev 6

您应该使用该parseInt函数并确保该值为数字(使用isNaN函数):

var val = $("#originalnum").val();

var num = 0;

if ( !isNaN(val) )
  num= parseInt(val) + 1;
Run Code Online (Sandbox Code Playgroud)

  • 请不要忘记提供`10`作为*radix*参数 (2认同)

Dar*_*jax 5

用途parseInt():

var num= parseInt($("#originalnum").val(),10) + 1;
Run Code Online (Sandbox Code Playgroud)

因此,您的数字被视为整数而不是字符串(.val()默认情况下将结果视为字符串)