0

我试图总结绑定时的两个输入字段。

这是我的功能:

$j('#calclength, #calcwidth').keyup(function() {
    var s1 = $j('#calclength').val();
    var s2 = $j('#calcwidth').val();
    var s3 = (s1) + (s2);
        $j('.s1').text(s3);
});

而#calclength, #calcwidth 是我的输入,.s1 是一个带结果的跨度。

目前,每当将例如 1 和 2 插入输入中时,结果都会显示为 12 而不是 3。

你们能告诉我我在这里做错了什么吗?

提前谢谢你的帮助。多姆

4

4 回答 4

6

使用将字符串转换为数字的一元 + 运算符

$j('#calclength, #calcwidth').keyup(function() {
    var s1 = $j('#calclength').val();
    var s2 = $j('#calcwidth').val();
    var s3 = (+s1) + (+s2);
    $j('.s1').text(s3);
});

小提琴

于 2012-07-27T13:25:15.473 回答
3

您需要将值转换为整数,例如parseInt()

var s1 = parseInt($j('#calclength').val(), 10);
var s2 = parseInt($j('#calcwidth').val(), 10);

第二个参数设置确保数字始终被视为十进制数字而不是八进制(前导)或十六进制(前导)的基数1000x


parseInt()也可以通过在数字前面加上前缀来使用隐式转换为数字+

var s1 = +$j('#calclength').val();
var s2 = +$j('#calcwidth').val();

哪种解决方案更适合您取决于您​​希望包含数字后跟垃圾的字符串的行为;请参阅此示例,了解行为有何不同:

js> +'123x'
NaN
js> parseInt('123x', 10)
123
于 2012-07-27T13:23:59.207 回答
2

这些值被读取为字符串,因此是连接的,而不是相加的。将它们强制为整数:

var s1 = parseInt($j('#calclength').val());
var s2 = parseInt($j('#calcwidth').val());
于 2012-07-27T13:22:55.120 回答
2

您需要将它们转换为整数,否则它们是字符串并连接在一起,而不是求和。

$j('#calclength, #calcwidth').keyup(function() {
    var s1 = $j('#calclength').val();
    var s2 = $j('#calcwidth').val();
    var s3 = (+s1) + (+s2);
        $j('.s1').text(s3);
});
于 2012-07-27T13:25:50.470 回答