Оператор переключения Javascript только запускает первый случай - PullRequest
0 голосов
/ 20 января 2019

a [2] - случайная целочисленная переменная от 1 до 100. Когда она меньше 33, она меняет цвет на красный, но когда она выше 33, она остается черной.Кто-нибудь понял, почему он игнорирует последние 2 случая?

<script type="text/javascript">
  switch (a[2]) {
    case < 33:
      document.getElementByID('speechstat').style.color = "red";
      break;

    case >= 33 && <= 66:
      document.getElementByID('speechstat').style.color = "blue";
      break;

    case > 66:
      document.getElementByID('speechstat').style.color = "green";
      break;
  }
</script>

Ответы [ 2 ]

0 голосов
/ 21 января 2019

В Javascript вы не можете сравнивать переменную с switch, но вы можете сделать это косвенно, поскольку ответ этого поста показывает: оператор переключения для сравнения значений, больших или меньших числа

С несколькими правками и добавлением html, чтобы проверить, все ли работает, вот как вы бы это сделали в вашем случае:

<!DOCTYPE html>
<html>
<body>

<p id="speechstat1"></p>
<p id="speechstat2"></p>
<p id="speechstat3"></p>

<script type="text/javascript">
    var a = 34; //You can set this to whatever you want or a user's input
    switch (true) {

        case (a<33):
            document.getElementById("speechstat1").innerHTML = "red works";
            break;

        case a>= 33 && a<= 66:
            document.getElementById('speechstat2').innerHTML = "blue works";
            break;

        case a> 66:
            document.getElementById("speechstat3").innerHTML = "green works";
            break;          
    }

  </script>
  </body>
</html>
  • Я вставил .innerHTML просто чтобы показать, как это работает, в вашем случае вы можете заменить те линии с тем, что вы хотите, чтобы это произошло.
  • Я изменил Switch на switch
  • Я изменил .getElementByID на .getElementById Правописание имеет значение!
  • Если вы тестируете переменную для двух условий: case >= 33 <= 66: вы нужно добавить оператор "и" case >= 33 **&&** <= 66:
  • Я изменил a[2] на a, чтобы он не выдавал ошибку, потому что он не назван правильно

В целом проще использовать операторы if и else для чего-то подобного, как упоминал Морган Уайльд.

0 голосов
/ 20 января 2019

В JavaScript операторы switch выглядят иначе, чем вы опубликовали.Например, вот некоторая документация по switch операторам в MDN .

Если вы хотите проверить диапазоны, вы должны проверить с помощью регулярных if/else операторов.

<script type="text/javascript">
    var color;

    // Check the possible value ranges.
    if (a[2] < 33) { color = 'red'; }
    else if (a[2] >= 33 && a[2] <= 66) { color = 'blue'; }
    else if (a[2] > 66) { color = 'green'; }

    document.getElementByID('speechstat').style.color = color;
</script>
...