1

请查看此演示小提琴

我想要做的是在结果中添加一个前导“$”。Retained Aid 中的标签“工作正常”,但是当我将“$”添加到它时,它会处理数字而不是显示运行总数,它只是将数字添加到输出中。

因此,添加2000 + 4000 + 5000会显示为“ $200040005000 in Retained Aid ”(带有美元符号,但实际上并未添加数字)。

var updateTotal = function () {
  var input1 = parseInt($('#earnedAid1').val() || 0);
  var input2 = parseInt($('#earnedAid2').val() || 0);
  var input3 = parseInt($('#earnedAid3').val() || 0);        
  $('#total').text("$" + input1 + input2 + input3 +" in Retained Aid");
};

编辑:除此之外,只需在输入框中输入“2”,在输出中显示为 $200。

4

3 回答 3

5

"$"在进行总和之前添加一个字符串,使其成为一个字符串。因此,随后如果您添加一个数字,它将把它视为一个字符串。

"some string" + 1 + 2 = "some string12" // considers 1,2 as strings while adding to the string.
"some string" + (1+2) = "some string3" //1+2 gets executed & then gets appended to the string

var sum = input1 + input2 + input3;
$('#total').text("$" + sum +" in Retained Aid");

选择:

$('#total').text("$" + (input1 + input2 + input3) +" in Retained Aid");
于 2013-10-29T13:27:25.803 回答
3

Javascript 使用+运算符来连接字符串和添加数字。如果它只看到表达式中的数字,它将添加它们,但是一旦表达式中有字符串,它就会将它们全部视为字符串。这解释了你所看到的。

那么如何解决呢?

简单:首先,确保值和是数值,然后将它们添加到与字符串部分不同的表达式中input1input2input3

parseInt()尽管您确实需要为NaN('Not A Number') 结果添加有效性检查,否则您将NaN在输出中获得文本,您已经在代码中执行了第一部分。

第二部分只是将数字包装在一组括号中的情况,因此它们被视为单独的表达式:

$('#total').text("$" + (input1 + input2 + input3) +" in Retained Aid");
于 2013-10-29T13:32:54.787 回答
1

+也是 JS 中文本连接的运算符——所以一旦你从一个文本值开始并“添加”东西到它,下面的值也将被转换为文本,因为不再发生数学加法,但它是从那里开始所有只是字符串连接。

但是你可以简单地解决这个问题,通过使用括号来分组表达式的哪一部分应该首先执行:

$('#total').text("$"+(input1 + input2 + input3) +" in Retained Aid");

http://jsfiddle.net/WuMpz/9/

于 2013-10-29T13:32:59.293 回答