#javascript #dom-events
#javascript #dom-события
Вопрос:
Итак, я изучаю JS и выясняю, как работают события. Я понимаю, что на высоком уровне события всплывают через узлы DOM. Прямо сейчас у меня есть bookDiv, который выполняет обновленный textContent только тогда, когда его дочерняя кнопка регистрирует щелчок. Я добавил некоторую функциональность, при которой текстовый контент обновляется только в том случае, event.target.tagName === "INPUT"
если.
Моя проблема в том, что после того, как этот родительский узел (bookDiv) обрабатывает щелчок, дочерние элементы этого bookDiv (который является просто <br>
и кнопкой) все исчезают. Я должен повторно добавить их, но это халтурно, и я не понимаю, почему это происходит. Ищу объяснение.
Примечание: в generateReadStatusButtonForBook(книга) Я передаю book, объект, в addEventListener, для которого требуется handleEvent. Я не включил объект в код.
Спасибо за вашу помощь
function generateNewBookDiv(book) {
const bookDiv = document.createElement("div");
bookDiv.classList.add("book-item");
bookDiv.textContent = `${book.title}rnby ${book.author}rnNumber of Pages: ${book.numPages}rnRead?${book.isRead}`;
// quick way to get a line break after the last text content for our read status button
const lineBreak = document.createElement("br");
bookDiv.appendChild(lineBreak);
bookDiv.appendChild(generateReadStatusButtonForBook(book));
bookDiv.addEventListener("click", (event) => {
//console.log("book div activating its click event");
if (event.target.tagName === "INPUT") {
//console.log("read button was identified and bubbled up");
event.currentTarget.textContent = `${book.title}rnby ${book.author}rnNumber of Pages: ${book.numPages}rnRead?${book.isRead}`;
const lineBreak = document.createElement("br");
bookDiv.appendChild(lineBreak); // not sure why the <br> and <button> elements disappear after click
bookDiv.appendChild(generateReadStatusButtonForBook(book));
}
});
container.appendChild(bookDiv);
}
// add read status button for each book
function generateReadStatusButtonForBook(book) {
const readStatus = document.createElement("INPUT");
readStatus.setAttribute("type", "button");
readStatus.classList.add("read-status");
readStatus.addEventListener("click", book); // toggle read status by passing in Book object which will do the toggling itself
return readStatus;
}
Комментарии:
1. Присвоение
TextContent
DIV заменяет все в DIV этим текстом. Это включает в себя<input>
элементы. Вы не можете заменить только текст.2. Поместите текст в интервал, а затем назначьте
textContent
промежутка.