Условно изменить BG изображение jQuery

0

Мне нужно условно изменить фон div на основе значения переменной здесь, это мой код:

<script type="text/javascript">
    $(document).ready(function(){
        if (combo.hcs <= 10) && (combo.hcs >= 1)
            $(".myClass").css("background-image", "url('BB.png')";
        else if (combo.hcs <= 20) && (combo.hcs >= 11)
            $(".myClass").css("background-image", "url('BH.png')";
        else if (combo.hcs <= 30) && (combo.hcs >= 21)
            $(".myClass").css("background-image", "url('BM.png')";
        else if (combo.hcs <= 40) && (combo.hcs >= 31)
            $(".myClass").css("background-image", "url('HB.png')";
        else if (combo.hcs <= 50) && (combo.hcs >= 41)
            $(".myClass").css("background-image", "url('HH.png')";
        else if (combo.hcs <= 60) && (combo.hcs >= 51)
            $(".myClass").css("background-image", "url('HM.png')";
        else if (combo.hcs <= 70) && (combo.hcs >= 61)
            $(".myClass").css("background-image", "url('MB.pmg')";
        else if (combo.hcs <= 80) && (combo.hcs >= 71)
            $(".myClass").css("background-image", "url('MH.png')";
        else if (combo.hcs <= 99) && (combo.hcs >= 81)
            $(".myClass").css("background-image", "url('MM.png')";
    }
</script>

Я не уверен, что это лучший подход или нет, но эфир, я получаю следующую ошибку в Chrome:

Uncaught SyntaxError: Unexpected token && 

5 ответов

0
Лучший ответ

Вам нужно включить два условия в те же скобки, например:

else if (combo.hcs <= 99 && combo.hcs >= 81)

Полный скорректированный код:

<script type="text/javascript">
  $(document).ready(function(){
    if (combo.hcs <= 10 && combo.hcs >= 1)
      $(".myClass").css("background-image", "url('BB.png')");
    else if (combo.hcs <= 20 && combo.hcs >= 11)
      $(".myClass").css("background-image", "url('BH.png')");
    else if (combo.hcs <= 30 && combo.hcs >= 21)
      $(".myClass").css("background-image", "url('BM.png')");
    else if (combo.hcs <= 40 && combo.hcs >= 31)
      $(".myClass").css("background-image", "url('HB.png')");
    else if (combo.hcs <= 50 && combo.hcs >= 41)
      $(".myClass").css("background-image", "url('HH.png')");
    else if (combo.hcs <= 60 && combo.hcs >= 51)
      $(".myClass").css("background-image", "url('HM.png')");
    else if (combo.hcs <= 70 && combo.hcs >= 61)
      $(".myClass").css("background-image", "url('MB.pmg')");
    else if (combo.hcs <= 80 && combo.hcs >= 71)
      $(".myClass").css("background-image", "url('MH.png')");
    else if (combo.hcs <= 99 && combo.hcs >= 81)
      $(".myClass").css("background-image", "url('MM.png')");
  }
</script>
  • 0
    Замечательно, что это исправлено, но теперь я получаю "Uncaught SyntaxError: Неожиданный токен;"
  • 1
    Сначала я этого не видел, но в ваших инструкциях перед закрывающей скобкой отсутствует ; , Вам нужно это: $(".myClass").css("background-image", "url('MM.png')"); Поэтому добавьте скобку в каждую инструкцию, и все готово. Я предлагаю вам взглянуть на ответ Джимми Йоханссона ниже, если вы хотите еще больше улучшить свой код.
3

Я думаю, что мой подход состоял бы в том, чтобы сохранить фоновые URL-адреса в массиве.

var imgs = ['BB.png','BH.png']; // etc in right order

var myIndex = Math.floor(combo.hcs/10);
$(".myClass").css("background-image", "url(" + imgs[myIndex] + ")");

С помощью этого решения вам не нужны инструкции if/else. За каждую десятую вы храните img-name в массиве.

1

Если вы попросите другое решение, я бы сделал это в общем виде. Я бы назвал изображения, такие как 10.png, 20png, 30.png... 100.png

и затем загрузит их примерно так:

var imageName = Math.ceil(combo.hcs/10)*10
var imageFullName = imageName+'.png'
$(".myClass").css("background-image", "url('"+imageFullName+"')";

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

И про вашу ошибку: ваш код

if (combo.hcs <= 10) && (combo.hcs >= 1)

должно быть следующим:

if ((combo.hcs <= 10) && (combo.hcs >= 1))
1

Рассмотрим инструкцию switch и более сжатый подход, чтобы оставаться DRYer и чище:

  var bg;
  var x = combo.hcs;

switch (true) {
   case (x>0 && x<=10):
     bg = "BB";
     break;
   case (x>10 && x<=20):
     bg = "BH";
     break;

// etc....

}

$(".myClass").css("background-image", "url('" + bg + ".png'");
0

Вы не должны закрывать скобки. Скобки заключают условие:

if (combo.hcs <= 10 && combo.hcs >= 1)
        $(".myClass").css("background-image", "url('BB.png')";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню