Javascript Jquery if/else语句不一致

Javascript Jquery if/else语句不一致,javascript,jquery,Javascript,Jquery,我有以下代码来检查动态更新的div中的十进制数 $('.numberfield').bind("DOMSubtreeModified", function() { var $numbercheck = $(this).text().substring(1); if($numbercheck < 5.00) { console.log('lower than 5.00 ' + $numbercheck); } else {

我有以下代码来检查动态更新的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);
    }
});
(每次绑定更改时触发2行)

所以我想主要的问题是,为什么“低”总是被触发

我使用的是Jquery 1.4.4

编辑:
我认为这可能与DOM在2个位置同时更新有关,从而触发

$numbercheck是子字符串操作的结果,您将其与浮点数进行比较。当您将字符串与数字进行比较时,它会给您一个出乎意料的结果


如果要与浮点进行比较,应使用parseFloat($numbercheck)。

您将
字符串
浮点
进行比较,这不是最佳做法。首先,必须使用
parseFloat
将字符串转换为浮点,然后使用
isNaN(您的浮点)
检查变量是否为
NaN
。如果没有,您可以继续您的条件

您可以改为使用此选项:

$('.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');
    }
});
$('.numberfield').bind(“domsubtremodified”,function()
{
//您需要删除所有空格和逗号,因为如果有空格或逗号,一元运算符“+”将返回NaN
var$numbercheck=+($(this).text().substring(1).replace('','').replace('','','');
如果(!isNaN($numbercheck)){//检查字符串是否被解析
如果($numbercheck<5.00){
console.log('低于5.00'+$numbercheck);
} 
否则,如果($numbercheck>5.00){
console.log('高于5.00'+$numbercheck);
}
否则{
log($numberCheck+'等于5.00');
}
}
否则{
log('error parsing number');
}
});
另外,我建议您从
numbercheck
变量中删除
$
,以便将其与可用于将
+$numbercheck
转换为数字的
JQuery
区分开来

您还可以重构代码:

$('.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);
});
$('.numberfield').bind('domsubtredemodified',函数(){
var$numbercheck=$(this).text().substring(1),
message=+$numbercheck<5.00?“低于5.00”:“高于5.00”;
console.log(message+$numbercheck);
});

将字符串与int和/或floatsA进行比较并不是一个好的做法,而是一些问题/注释。1)
.bind()
被弃用,取而代之的是上的
。2) 为什么要使用DOMSubtreeModified事件?3) 您的输出与代码不匹配-输出中应显示
5.00
。这是您问题中的一个输入错误,还是真正的代码与您提供的不同?在每次更改的初始控制台日志中
低于5之后,您将一无所获,这一事实应该告诉您一些事情。也就是说,
$numbercheck
值是一个空字符串。而且,由于
”<5.00===true
,它总是通过。我认为您捕获的事件比您预期的要多。解决办法很简单;比较之前,请检查
$(this).text()
的长度,或者查找其他要捕获的事件。@mhodges 1)使用Jquery 1.4.4 2)我正在检查div字段的值,因此。更改无效。3) 是的,打字错误,修复了。@Mike McCaughan我想你了解了一些事情,我需要另一个事件来捕获,因为当数字改变时,DOM同时被另一个脚本改变了两次。感谢你使用实际的
string->number
强制而不是解析。不过你确实需要
isNaN()
检查这里,因为NaN与任何值比较都会返回False,所以您还需要检查空格。我认为
$('.numberfield')
大多数都是一个数字输入字段,这将避免需要额外检查。@Yosvel Quintero.numberfield是一个div字段,而不是一个输入字段。此脚本还返回double:(将
parseFloat
更改为
Number
+
,这将是输入验证的正确解决方案。此外,您可能还需要替换
以及
Number()
将阻塞,
parseInt
parseFloat
将只返回commasI之前的内容,我仍然得到与此解决方案相同的行为:
>低于5.00 0>高于5.00 16.3>低于5.00 0>高于5.00 16.31
我认为DOM更新2倍的双重触发(通过另一个脚本)当.numberfield更改时..这并不能说明全部情况。DOM事件将触发两次,一次为空值,一次为实际值。此外,强制解析只是询问bug。
$('.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');
    }
});
$('.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);
});