Показать название ссылки в div и изменить фоновое изображение

#javascript #jquery #html #css

#javascript #jquery #HTML #css

Вопрос:

Мне нужно отобразить название «выбрать бренд» в div («Выбранный бренд») после выбора меню и в то же время изменить фоновое изображение с сайта. Итак, если кто-то нажимает на марку, подобную BMW, он должен отобразить название «BMW» в div «выбранная марка» и изменить фоновое изображение с веб-сайта.

Для примера, пожалуйста, загляните на сайт: Выбор автомобиля

Я использую следующий скрипт для заполнения параметров выбора

 var selectData = {

  "bmw": {

    "1": "316i",
    "100": "520i",
    "101": "740i"

  },
  "audi": {
    "2": "Audi A4",
    "200": "AudiA6",
    "201": "AudiA8"

  },
  "mercedes": {

    "3": "A 180",
    "300": "E 320",
    "301": "S 500"

  },

};
jQuery(document).ready(function($) {
  $(document).on('click', '.specialLink', function(event) {

    var radio2 = document.getElementById('radio2');
    if (radio2.checked == false) {
      radio2.checked = true;
      toggleRadio();
    }

    event.preventDefault();
    var b = $(this),
      buttonId = b.attr('id'),
      selectSet = selectData[buttonId],
      selectField = $('#specialLink');
    selectField.empty();
    if (selectSet) {
      $.each(selectSet, function(k, v) {
        selectField.append($('<option>', {
          value: k,
          text: v
        }));
      });
    }
    return false;
  });
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>  

и для переключения этого скрипта

 function toggleRadio() { // will activate when the form will change.
  var radio1 = document.getElementById('radio1'); // radio 1
  var radio2 = document.getElementById('radio2'); // radio 2
  if (radio1.checked == true) { // if the first checked display input and hide select
    document.getElementById('textLabel').style.display = 'block';
    document.getElementById('selectLabel').style.display = 'none';
    document.getElementById('specialLink').value = ''; // clear selected option
  } else { // because i got only 2 option i don't have to use another condition
    document.getElementById('textLabel').style.display = 'none';
    document.getElementById('selectLabel').style.display = 'block';
    document.getElementById('textin').value = ''; // clear input
  }
}
toggleRadio(); // call the function  

Ответ №1:

Я внес некоторые изменения в приведенный выше код, чтобы получить желаемый результат. Как вы можете видеть, я добавил индекс изображения в объект selectedData сверху, просто чтобы получить соответствующее фоновое изображение бренда. Я упоминал, что изменения кода также вносятся в комментарии.

 var selectData = {

  "bmw":{

        "1":"316i",
         "100":"520i",
          "101":"740i",
          "image":"https://cdn.pixabay.com/photo/2017/08/30/01/05/milky-way-2695569_960_720.jpg"
  },
  "audi":{
    "2":"Audi A4",
    "200":"AudiA6",
     "201":"AudiA8",
     "image":"https://cdn.pixabay.com/photo/2017/08/30/01/05/milky-way-2695569_960_720.jpg"

  },
   "mercedes":{

         "3":"A 180",
         "300":"E 320",
          "301":"S 500",
          "image":"https://cdn.pixabay.com/photo/2017/08/30/01/05/milky-way-2695569_960_720.jpg"

  },

 };
    jQuery(document).ready(function($) {
      $(document).on('click', '.specialLink', function(event) {
        var radio2 = document.getElementById('radio2');
        if (radio2.checked == false) {
          radio2.checked = true;
          toggleRadio();
        }
        $(".brand").html($(this).text());
        event.preventDefault();
        var b = $(this),
        background_image = '';
          buttonId = b.attr('id'),
          selectSet = selectData[buttonId],
          selectField = $('#specialLink');
        selectField.empty();
        //To change the background image of website
        $("#banner").css('background','url("' selectSet.image '")');
        if (selectSet) {
        //Remove imgae index form selectSet
         $.each(selectSet, function(k, v) {
        if(typeof k === 'string' amp;amp; k === 'image') {
        return true; } selectField.append($('<option>', 
        { value: k, text: v })); 
        });
        }
        return false;
      });
    });
  

Комментарии:

1. Да, это работает почти идеально, но это работает только один раз с изменением фона. Если щелкнуть еще раз по какой-либо ссылке, которая уже использовалась, она покажет белый фон. Я разместил ваш код на веб-сайте, вы можете попробовать еще раз, пожалуйста.

2. О, я вижу, вместо удаления элемента из массива selectset мы можем просто пропустить этот индекс изображения и его значение. Удалите или прокомментируйте следующий код, удалите selectSet[‘изображение’]; из приведенного выше скрипта и добавьте приведенный ниже код в jquery для каждой функции selectset. $.each(selectSet, функция(k, v) { if(typeof k === ‘string’ amp;amp; k === ‘image’) { возвращает true; } selectField.append($(‘<опция>’, { значение: k, текст: v })); });

3. Отлично, это работает очень хорошо. Теперь я вижу, что «медиа-экран» в css больше не работает. У меня есть 5 мультимедийных экранов для разного размера отображения фонового изображения. . @экран мультимедиа и (максимальная ширина: 1780 пикселей){ .баннер{ экран мультимедиа и (максимальная ширина: 1080px) экран мультимедиа и (максимальная ширина: 1050 пикселей) экран мультимедиа и (максимальная ширина: 991px) экран мультимедиа и (максимальная ширина: 480px)

4. @bruno2000, я просмотрел ваш медиа-запрос и обнаружил, что он вообще не работает. Вам просто нужно добавить еще немного стиля, чтобы сделать фоновое изображение отзывчивым. Просто скопируйте приведенный ниже код и добавьте его в свой CSS. .баннер { background-repeat: без повтора; background-size: содержать; background-position:center; } Вместе с этим измените приведенный выше код скрипта: $(«#banner»).css(‘background’,’url(» selectSet.image ‘»)’); на $(«#banner»).css(‘background-image’,’url(«‘ selectSet.image ‘»)’);

5. возможно ли написать подобное в скрипте? «bmw»: { «1»: «316i», «100»: «520i», «101»: «740i», «image»:» cdn.pixabay.com/photo/2017/08/30/01/05 /… «если ($(window). ширина() < 641) { $(«# Баннер»).attr(«src», «images/BG700px.jpg «), если ($(window). ширина() < 900) { $(«# Баннер»).attr(«src», «images/BG900px.jpg «), если ($(window). ширина() < 1200) { $(«# Баннер»).attr(«src», «images/BG1200.jpg «)

Ответ №2:

Чтобы изменить текст, установите .textContent для «Выбранного бренда»-div в вашем clickhandler на «.specialLink» значение $(this).text() .

Чтобы изменить цвет, вы можете установить element.style.background для вашего целевого элемента желаемый цвет, опять же в вашем clickhandler.

Комментарии:

1. можете ли вы показать мне, как посмотреть div и где я должен отредактировать сценарий выбора опции?

2. вы могли бы добавить желаемые действия под следующей строкой $(document).on('click', '.specialLink', function(event) { . вы можете определить дескриптор divs, щелкнув по нему правой кнопкой мыши в браузере и просмотрев его (я полагаю, что у него есть класс brand, поэтому селектором будет $ (‘.brand’))