Я просмотрел другие ответы, но не смог найти решение этой проблемы.Добавить прослушиватель событий к динамически созданной кнопке
У меня есть этот HTML:
<body>
<h1>Javascript in the Browser</h1>
<div id="removeReference">
</div>
<div>
<p>This page looks a little sad without any style...</p>
<button id="styleButton">Apply some style!</button>
</div>
<div id="imagePlaceholder">
</div>
<script src="script.js"></script>
</body>
В файле JavaScript, у меня есть функция stylePage
, которая вызывается при нажатии на кнопку, и это добавляет некоторый стиль, удаляет саму кнопку, и создает новую кнопку. На этом этапе я хотел бы добавить событие к этой динамически созданной новой кнопке, чтобы при нажатии на нее запускалась функция createImage
.
Я знаю, что лучше использовать библиотеки, но это попытка самообучения JavaScript. Я думал, что, возможно, было возможно вернуть кнопку от stylePage
и добавить прослушиватель событий к возвращаемому значению, но это не сработало. Любое предложение очень ценится, спасибо!
function stylePage(){
var body = document.getElementsByTagName("body");
body[0].style.backgroundColor = "rgb(214, 214, 214)";
body[0].style.color = "#778899";
body[0].style.fontFamily = "Courier";
body[0].style.textAlign = "center";
var remove = document.getElementById("removeReference");
remove.nextElementSibling.remove();
var newButton = document.createElement("button");
var newContent = document.createTextNode("Not enough?");
newButton.appendChild(newContent);
document.body.insertBefore(newButton, remove);
};
function createImage(){
var img = document.createElement("img");
img.src = "pepsi_dog_by_werelyokoman.jpg";
document.getElementById("imagePlaceholder").appendChild(img);
}
var button = document.getElementsByTagName("button");
button[0].addEventListener("click", stylePage);
//??? reference to newButton ??? .addEventListener("click", createImage);
Вы можете найти эту статью полезной: https://davidwalsh.name/event-delegate – SimianAngel
HTTP: // StackOverflow .com/вопросы/1687296/what-is-dom-event-delegation –
Спасибо за информацию о делегировании событий! – HiFi