绑定上两个输入的总和

问题描述:

我试图在绑定上sumarise两个输入域。绑定上两个输入的总和

这是我的函数:

$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

你们能不能指点我,我错了,请在这里做的那一刻?

非常感谢您的帮助。 Dom

使用一元+运营商,否则他们是字符串,连接,不加总结。

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

+ +1 :) – Dipak 2012-07-27 13:40:30

+1

@Dipaks :)谢谢 – 2012-07-27 13:58:50

+0

+1。哇,我怎么不知道这个小黑客来到这里呢? – Utkanos 2012-07-27 15:09:50

这些值是作为字符串读取的,因此连接在一起,而不是总和。强制它们为整数:

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

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

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

第二个参数设置10其确保号码总是被视为十进制数,而不是八进制(前导0)或十六进制(前导0x)。


相反的parseInt()你也可以通过用+前缀它使用隐式转换为数字:

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

哪种方案更适合你取决于你想要什么样的行为包含数字后跟垃圾的字符串;看到的行为有什么不同这个例子:该字符串转换为数字

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

Fiddle

+0

+1,解析变体适用于诸如'“500px”'等情况。在你不想快速失败的地方,因为你知道会有px。 – Esailija 2012-07-27 14:00:46

+0

+1。我知道这对于一个84k的家伙来说毫无意义,但作为一个500人,我承认我应该提供有关+('123x')= NaN'方面的信息。感谢您的完整答案。 – 2012-11-17 17:50:22

你需要将它们转换为整数

js> +'123x' 
NaN 
js> parseInt('123x', 10) 
123