Я пытаюсь переключить classList для добавленных детей; У меня есть переключатель для работы с уже существующими, но когда я добавляю через пользовательский ввод, он не будет работать, какие-либо советы о том, как я могу это сделать? потому что на данный момент я в растерянности, пожалуйста, помогите!
var button = document.getElementById("enter");
var ul = document.querySelector("ul");
var input = document.getElementById("userinput");
var list = document.getElementsByTagName("li");
function listDone() {}
function inputLength() {
return input.value.length;
}
function createListElement() {
var li = document.createElement("li");
li.appendChild(document.createTextNode(input.value));
ul.appendChild(li);
input.value = "";
}
function addListAfterClick() {
if (inputLength() > 0) {
createListElement();
}
}
function addListAfterKeyPress(event) {
if (inputLength() > 0 && event.keyCode === 13) {
createListElement();
}
}
button.addEventListener("click", addListAfterClick);
input.addEventListener("keypress", addListAfterKeyPress);
function listDoneToggle() {
for (i = 0; i < list.length; i++) {
list[i].addEventListener("click", function() {
this.classList.toggle("done");
});
}
}
listDoneToggle();
1 ответ
Вы можете просто добавить прослушиватель событий к создаваемому элементу. Во-первых, вы можете выделить обработчик события в его собственную именованную функцию, чтобы его можно было использовать в нескольких местах и иметь только одну функцию для поддержки на случай, если позже потребуется изменение:
function applyToggle() {
this.classList.toggle("done");
}
А затем отредактируйте свой код следующим образом:
function createListElement() {
var li = document.createElement("li");
li.addEventListener("click", applyToggle); // <--
// ...
}
function listDoneToggle() {
for (i = 0; i < list.length; i++) {
list[i].addEventListener("click", applyToggle); // <--
}
}
При желании, если вы хотите повторно использовать переменную list
позже и иметь все свои элементы (включая те, которые вы создали динамически), вы также можете поместить их в этот список:
function createListElement() {
var li = document.createElement("li");
li.addEventListener("click", applyToggle);
Array.prototype.push.apply(list, li); // <--
// ...
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.