Вы были действительно очень близки!
function todoList() {
var item = document.getElementById("todoInput").value;
var text = document.createTextNode(item);
var listItem = document.createElement("li");
listItem.appendChild(text);
document.getElementById("list").appendChild(listItem);
}
var ul = document.getElementById("list");
ul.addEventListener("click", function(e) {
if (e.target.tagName === "LI"){
e.target.classList.toggle("checked");
}
});
Ваша первая проблема заключалась в том, что вы делали document.getElementById('ul')
, ваш ul
идентификатор элемента был на самом деле list
. Просто глупая ошибка.
Мне действительно пришлось открыть devtools и поставить точку останова в вашем условном выражении, чтобы проверить, на что нажали.
Оказывается, e.target.tagName
оценивается как LI
, а не li
.
Просто нужно изменить чек на LI
Что касается использования событий. onclick
будет выполнять ту же работу, что и addEventListener
. То, как вы сделали это здесь с делегированием событий, в значительной степени так же хорошо, как вы получите это с помощью vanilla JS. В конце концов, все сводится к личным предпочтениям: в некоторых средах вы можете настраивать события с помощью атрибутов элементов, а в некоторых - настраивать их с помощью прослушивателей событий, которые вы можете смешивать и сопоставлять, если хотите. Это действительно зависит от вас и вашей команды (если это совместный проект).