我有以下代码来检查动态更新的div中的十进制数。
$('.numberfield').bind("DOMSubtreeModified", function()
{
var $numbercheck = $(this).text().substring(1);
if($numbercheck < 5.00) {
console.log('lower than 5.00 ' + $numbercheck);
}
else {
console.log('higher than 5.00 ' + $numbercheck);
}
});
但当我达到高于5.00的数字时,它也会触发较低的if
此外,无论如何,它似乎都在触发IF条件。
> lower than 5.00
> lower than 5.00 0.12
(每次绑定更改时触发2行)
> lower than 5.00
> lower than 5.00 1.28
> lower than 5.00
> higher than 5.00 12.89
> lower than 5.00
> higher than 5.00 129.00
> lower than 5.00
> higher than 5.00 129.00
所以我猜主要的问题是,为什么总是会触发'较低'?
我正在使用Jquery 1.4.4
编辑: 我认为这可能与DOM在2个位置同时更新有关,从而触发。
答案 0 :(得分:2)
您可以使用Unary plus (+) operator将+$numbercheck
转换为数字。
你也可以重构你的代码:
$('.numberfield').bind('DOMSubtreeModified', function () {
var $numbercheck = $(this).text().substring(1),
message = +$numbercheck < 5.00 ? 'lower than 5.00 ' : 'higher than 5.00 ';
console.log(message + $numbercheck);
});
答案 1 :(得分:1)
$ numbercheck是子字符串操作的结果,您将它与浮点数进行比较。当您将字符串与数字进行比较时,它会给您一个您不期望的结果。
如果要与浮点数进行比较,则应使用parseFloat($ numbercheck)https://www.w3schools.com/jsref/jsref_parsefloat.asp。
答案 2 :(得分:1)
您正在将string
与float
进行比较,这不是最佳做法。首先,您必须使用parseFloat
将字符串转换为浮点数,然后使用NaN
检查您的变量是否为isNaN(your_float)
。如果没有,你可以继续你的条件。
您可以改用:
$('.numberfield').bind("DOMSubtreeModified", function()
{
//you need to remove all space and comma because unary operator "+" will return NaN if you have spaces or comma
var $numbercheck = +($(this).text().substring(1).replace(' ', '').replace(',',''));
if (!isNaN($numbercheck)) { //check if string is parsed
if($numbercheck < 5.00) {
console.log('lower than 5.00 ' + $numbercheck);
}
else if ($numbercheck > 5.00){
console.log('higher than 5.00 ' + $numbercheck);
}
else {
console.log($numberCheck + ' is equal to 5.00');
}
}
else {
console.log('error parsing number');
}
});
另外,我建议您从$
变量中移除numbercheck
,以便将其与JQuery
区分开来。