Jquery if / else语句不一致

时间:2017-05-26 15:17:39

标签: 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 {
        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个位置同时更新有关,从而触发。

3 个答案:

答案 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)

您正在将stringfloat进行比较,这不是最佳做法。首先,您必须使用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区分开来。