这个'其他如果'条件不起作用

时间:2016-04-30 05:54:36

标签: javascript jquery

我陷入了一个简单的else if状态,并且相信这是我第一次遇到这个问题。也许我做错了什么,我不知道。

$('#lblShowCounter').each(function () {
    if ($(this).text() >= '250') {
        alert('red');
    } else if ($(this).text() >= '300') {
        alert('blink');
    } else {
        alert('nothing');
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="lblShowCounter">800</span>

问题是这段代码只会先执行if而不是else if看起来好像不会检查元素文本两次,对吧?但是当我使用它时它工作正常:

    $('#lblShowCounter').each(function () {
        if ($(this).text() >= '250') {
            alert('red');
        }
    });

    $('#lblShowCounter').each(function () {
        if ($(this).text() >= '300') {
            alert('blink');
        }
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="lblShowCounter">800</span>

请注意,我需要两个警报,因为800大于300且大于250。

5 个答案:

答案 0 :(得分:3)

您的if / else语句顺序错误。它应该是:

$('#lblShowCounter').each(function () {
    if ($(this).text() >= '300') {
        alert('black');
    } else if ($(this).text() >= '250') {
        alert('blink');
    } else {
    alert('nothing');
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="lblShowCounter">800</span>

300大于250,因此第二个语句将永远不会执行,因为对于大于250的所有值(包括大于300),第一个语句为真。

如果要执行两个语句,则不应使用else if,因为如果第一个语句为true,则会停止执行。而是使用两个if子句,例如:

$('#lblShowCounter').each(function () {
    if ($(this).text() >= '300') {
        alert('black');
    }
    if ($(this).text() >= '250') {
        alert('blink');
    }
});

答案 1 :(得分:1)

更改订单,因为300大于250

$('#lblShowCounter').each(function () {
    if ($(this).text() >= '300') {
        alert('blink');
    } else if ($(this).text() >= '250') {
        alert('red');
    } else {
    alert('nothing');
    }
});

答案 2 :(得分:0)

遵循代码的逻辑,没有条件你可以点击第二个if语句。你必须改变这样的顺序:

$('#lblShowCounter').each(function () {
  if ($(this).text() >= '300') {
    alert('blink');
  } else if ($(this).text() >= '250') {
    alert('red');
  } else {
    alert('nothing');
  }
});

答案 3 :(得分:0)

由于此问题已更新,表明您需要2个提醒。

使用if/elseif块,一旦达到第一场比赛,该块就会完成。因此,在代码中,一旦匹配250,if语句就会完成,elseif永远不会被评估。

要获得独立执行的多个条件,它们应该是多个if语句:

$('#lblShowCounter').each(function () {
    var text = $(this).text(),
        matched;

    if (text >= '300') {
        alert('blink');
        matched = true;
    }
    if (text >= '250') {
        alert('red');
        matched = true;
    }

    if (!matched) {
        alert('nothing');
    }
});

答案 4 :(得分:0)

使用&&尝试此操作,我的意思是限制持续时间:

$('#lblShowCounter').each(function () {
    if ($(this).text() >= '250' && $(this).text() < '300') {
        alert('red');
    } else if ($(this).text() >= '300') {
        alert('blink');
    } else {
    alert('nothing');
    }
});