Функция, вызываемая динамически, аргумент не определен

Я динамически создаю галерею, каждый элемент галереи имеет событие onClick, которое вызывает функцию, которая имеет значение элемента в качестве аргумента.

Я тестировал код без "", и значение определено, но функция запускается при создании элемента, а не при нажатии.

Когда я использую "", функция запускается, только когда я нажимаю на нее, но я получаю значение не определено

Я хотел бы динамически создать функцию и запускать ее при щелчке, используя значение в качестве аргумента.

jsGallery - это массив, который я использую для создания элементов галереи.

Код товара галереи

function createDiv(type) {
  jsGallery.forEach((item) => {
    if (item.type === type) {
      let newDiv = document.createElement("div");
      newDiv.setAttribute("value", item.id);
      newDiv.setAttribute("class", "item" + " " + type);
      newDiv.setAttribute("id", "dynamic");

      newDiv.setAttribute("onClick", "testFire(value)");

      document.getElementById("galleryContainer").appendChild(newDiv);
    }
  })
}

Функция TestFire

function testFire(value) {
  console.log(value);
}

person Upsetti_Spaghetti    schedule 15.12.2019    source источник
comment
Атрибут value не существует для элементов div. См. stackoverflow.com/questions/11238508/   -  person Michael Rodriguez    schedule 15.12.2019
comment
Где вы ожидали, что value будет определено?   -  person Bergi    schedule 15.12.2019


Ответы (2)


Аргумент testFire (value) - это несуществующая привязка, поэтому он возвращает undefined.

Вместо того

newDiv.setAttribute("onClick", "testFire(value)");,

do:

newDiv.onclick = () => testFire(newDiv.value);

Кстати, он по-прежнему возвращал undefined, потому что элементы div имеют только глобальные атрибуты .

person Andre Nuechter    schedule 15.12.2019

Спасибо, Андре Нойхтер, я использовал ваш метод, но немного изменил его, так как значение по-прежнему возвращалось как не определенное.

newDiv.onclick = () => testFire(item.id);

person Upsetti_Spaghetti    schedule 15.12.2019