Рендеринг элементов в DOM из массива и изменение значения для каждого при клике - PullRequest
0 голосов
/ 08 февраля 2019

Итак, я получил этот код, чтобы вытолкнуть все элементы из массива внутри DOM.

Как заставить событие щелчка работать для каждого элемента?

Редактировать:

let items = {
  item1: {
    cost: 2200,
    owned: 0,
    type: "item type",
    name: "item1",
    desc: "item1 desc.",
    img: "img/item1.gif"
  },
  item2: {
    cost: 4400,
    owned: 0,
    type: "item type",
    name: "item2",
    desc: "item2 desc.",
    img: "img/item2.gif"
  },
};

for (let key of Object.keys(items)) {
  if (items[key].owned==0) {
    var el = document.createElement('div');
    var domString = '<div class="item"><div class="w3 h3 bg-center contain" style="background-image:url(' + items[key].img + ')"></div><span>'+ items[key].name +'</span><span>Price: '+ items[key].cost +'</span><span>'+ items[key].desc +'</span></div>';
    el.innerHTML =  domString;
    el.addEventListener('click', function() {
      items[key].owned = 1;
      console.log(items[key].name + ' ' + items[key].owned);
    });
    document.getElementById('shop').appendChild(el.firstChild);
  }
}

Кстати, я хочу изменить одну переменную элемента при клике.Слушатель событий не работает в этом коде.

1 Ответ

0 голосов
/ 08 февраля 2019

Используйте клавиши Object для назначения идентификатора, а затем добавьте прослушиватель событий

for (let key of Object.keys(items)) {
  if (items[key].owned==0) {
    var el = document.createElement('div');
    var domString = '<div id="' + items[key] + '"><div class="w3 h3 bg-center contain" style="background-image:url(' + items[key].img + ')"></div><span>'+ items[key].name +'</span><span>Price: '+ items[key].cost +'</span><span>'+ items[key].desc +'</span></div>';
    el.innerHTML =  domString;
    document.getElementById('shop').appendChild(el.firstChild);
  }
}

for (let key of Object.keys(items)) {
  document.getElementById(items[key]).addEventListener('click', function() {
    items[key].owned = 1
  });
}

, или вы можете просто назначить прослушиватель для элемента div, созданного с помощью document.createElement

for (let key of Object.keys(items)) {
  if (items[key].owned==0) {
    var el = document.createElement('div');
    var domString = '<div id="' + items[key] + '"><div class="w3 h3 bg-center contain" style="background-image:url(' + items[key].img + ')"></div><span>'+ items[key].name +'</span><span>Price: '+ items[key].cost +'</span><span>'+ items[key].desc +'</span></div>';
    el.innerHTML =  domString;
    el.addEventListener('click', function() {
       items[key].owned = 1
    });
    document.getElementById('shop').appendChild(el);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...