Почему мой цикл for … in не работает правильно?

378
07 августа 2017, 13:25

Я уже несколько часов ломаю себе голову, не могу понять почему мой код не работает правильно. В общем моя цель чтобы при клике на главной странице, менялся текст внутри тэга <h1>

Ранее я уже выполнил это простым способом как показано ниже, и конечно прописывал каждый класс элемента .ottogi .sojo .natura ну итд. Можно ссылаться по следующей ссылке http://test1.testkz.ru/

var text = $('.inner-container h1').text();
var changeString = $('.inner-container h1');
$('.ottogi').click(function() {
    if (text == 'Ottogi') {
        $(changeString).text('Ottogi');
    }
});
 $('.sajo').click(function() {
     if (text == 'Ottogi') {
        $(changeString).text('Sajo Hapyo');
    }
 });

Потом, чтобы не повторять данную процедуру 6 раз, решил создать объект, и пробижаться по нему циклом for ... in для реализации данной процедуры. Возможно мой if не срабатывает правильно. Ребята посмотрите и помогите пожалуйста

const selectorToResponse = {
  '.ottogi': 'Ottogi',
  '.sajo': 'Sajo Hapyo',
  '.natura': 'Natura Bogata',
  '.maloo': 'TOO Maлy',
  '.dongush': 'Dongsuh',
  '.may': 'OOO Maй'
}
// Prefixing with $ to denote that is an element, not text etc
const $header = $('.inner-container h1')
for (const selector in selectorToResponse) {
  $(selector).click = function () {
    // using $header.text() inside function so that is current header text
    // `text` never changed in your example
    if ($header.text() === 'Ottogi') { // using === instead of ==
      const response = selectorToResponse[selector]
      $header.text(response)
    }
  }
}

Вот HTML

        <div class="left-main col-lg-3 col-md-3 col-sm-12 col-xs-12">
            <div class="shadow-effect"><p class="ottogi">OTTOGI</p></div>
            <div class="shadow-effect"><p class="sajo">Sajo Hapyo</p></div>
            <div class="shadow-effect"><p class="natura">Natura Bogata</p></div>
            <div class="shadow-effect"><p class="maloo">ТОО Малу</p></div>
            <div class="shadow-effect"><p class="dongush">Dongsuh</p></div>
            <div class="shadow-effect"><p class="may">ООО Май</p></div>
        </div>
        <div class="right-main col-lg-9 col-md-9 col-sm-12 col-xs-12">
            <div class="inner-container">
                <h1>Ottogi</h1>
                <h2>Южно - Корейские продукты питания высочайшего качества!</h2>
            </div>
Answer 1

Вместо

const selectorToResponse = {
  '.ottogi': 'Ottogi',
  '.sajo': 'Sajo Hapyo',
  '.natura': 'Natura Bogata',
  '.maloo': 'TOO Maлy',
  '.dongush': 'Dongsuh',
  '.may': 'OOO Maй'
}
// Prefixing with $ to denote that is an element, not text etc
const $header = $('.inner-container h1')
for (const selector in selectorToResponse) {
  $(selector).click = function () {
    // using $header.text() inside function so that is current header text
    // `text` never changed in your example
    if ($header.text() === 'Ottogi') { // using === instead of ==
      const response = selectorToResponse[selector]
      $header.text(response)
    }
  }
}

Сократить код следующим образом

Получаете значение из текста меню и выводите его в заголовок.

$(function () {
    var header = $('.inner-container h1');
    $('.shadow-effect p').click(function () {
        header.text($(this).text());
    });
});
Answer 2

//может вообще можно без объекта обойтись? зачем сущности плодить без надобности? 
selectorToResponse.forEach(function (i){ 
  addEventListener("click", function(){ 
    if ($header.text() === 'Ottogi') { // using === instead of == 
      const response = selectorToResponse[selector] 
      $header.text(response) 
    } 
  }); 
});

А зачем вы selector как константу объявляете? да еще внутри цикла?

READ ALSO
Как вывести значение поля properties в админку?

Как вывести значение поля properties в админку?

Добрый день! Пытаюсь добавить кастомное поле в админку и вывести туда значение сохраненное в БД в поле 'properties'В файл assets\components\tickets\js\mgr\comment\comment

338
Почему последний alert даёт false?

Почему последний alert даёт false?

Потому что DogAbanis barking !== Dog Aban is barking :)

304
JS, JQ Battleship bag [требует правки]

JS, JQ Battleship bag [требует правки]

A bug arises, the computer hits the already damaged ship and no longer makes moves, I do not know how to fix itSources by reference https://drive

419
воспроизведение HLS-потока в браузере (html5-video)

воспроизведение HLS-потока в браузере (html5-video)

Стоит задача организовать трансляцию HLS потоков на Smart TV телевизорах (LG, Samsung, Philips ect)

403