Как повестить событие onclick на динамически создаваемый button?

Как повесить событие onclick, на метод AlertOn(), на динамически создаваемый button?
<html>
	<head>
		<title>Page Title</title>
	</head>
	<body>
	<div class="headall" id="allhead">Меню</div>
	<div class="bodyall" id="allbody"></div>
	</body>
</html>


class Menu {//Menu
  constructor(name, hod) {//construct
	this.name = name;
	this.hod = hod;
	this.AlertOn = function (){
		alert(this.hod);
	}
	countMenu++;
	}//endconstruct
}//endMenu

countMenu = 0;

menu1 = new Menu("Меню 1", "1");
menu2 = new Menu("Меню 2", "2");
menu3 = new Menu("Меню 3", "3");
menu4 = new Menu("Меню 4", "4");

for(j = 1; j <= countMenu; j++){
	let num = window["menu"+j];
let div = document.createElement('button');
  div.className = "buttonMenu";
  div.innerHTML = num.name;
  allbody.append(div);
	}
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@Konf
Редактирую ответы на 2 + 2 по 4 раза
Наверное, как-то так
class Menu { // Menu
  constructor(name, hod) { // construct
    this.name = name;
    this.hod = hod;
    this.AlertOn = function() {
      alert(this.hod);
    }

    countMenu++;
  } // endconstruct
} // endMenu

countMenu = 0;

menu1 = new Menu("Меню 1", "1");
menu2 = new Menu("Меню 2", "2");
menu3 = new Menu("Меню 3", "3");
menu4 = new Menu("Меню 4", "4");

for (j = 1; j <= countMenu; j++) {
  const menu = window["menu" + j]; // terrible
  const div = document.createElement('button');

  div.className = "buttonMenu";
  div.innerHTML = menu.name;
  div.addEventListener('click', menu.AlertOn.bind(menu));

  allbody.append(div);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@writer_2159
Жуть... просто жуть...
делегирование событий. тоесть навешиваем событие на родителя, который не перерисовывается (да хоть на document), а в событии проверять что событие отработало при взаимодействии с нужным элементом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы