На моей странице HTML у меня есть кнопка, которая создает другую кнопку при нажатии. Эта созданная кнопка создает абзац при нажатии, но этот работает только один раз. Это две функции внутри друг друга, что, я думаю, является причиной проблемы. Что было бы лучшим способом сделать это?
Написание внутренней функции отдельно от содержащей ее дает мне ошибку, поскольку идентификатор, к которому пытается обратиться внутренняя, не существует, пока не будет вызвана содержащая функция / нажата исходная кнопка.
// Containing function
document.getElementById("buttonCreator").onclick=function() {
targetElement.innerHTML = (""); // Reset the main divs contents
var button1 = document.createElement("button"); // Create a button
var bContent = document.createTextNode("Click me!");
button1.appendChild(bContent);
button1.setAttribute("id", "createdButton"); // Give the button an id
targetElement.appendChild(button1);
// Inner function - this only works once
document.getElementById("createdButton").onclick=function() {
targetElement.innerHTML = targetElement.innerHTML
+ "<br> <br>"
+ ("You clicked the created button!);
}
}
Там нет ошибок.
2 ответа
Проблема в targetElement.innerHTML = targetElement.innerHTML
, где вы заменяете исходный HTML-код, к которому прикреплено событие DOM (щелчок), новым HTML-кодом и больше не присоединяете это событие.
Вы можете попытаться создать другую функцию, чтобы справиться с этим.
document.getElementById("buttonCreator").onclick=function() {
targetElement.innerHTML = (""); // Reset the main divs contents
var button1 = document.createElement("button"); // Create a button
var bContent = document.createTextNode("Click me!");
button1.appendChild(bContent);
button1.setAttribute("id", "createdButton"); // Give the button an id
targetElement.appendChild(button1);
button1.addEventListener('click', () => {
clickCreatedButton(targetElement, button1);
})
}
function clickCreatedButton(targetElement, button) {
button.addEventListener('click', () => {
targetElement.innerHTML = targetElement.innerHTML
+ "<br> <br>"
+ ("You clicked the created button!");
})
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.