Хорошо, так что я надеюсь, что я просто что-то упустил.В основном я делаю список задач, в котором я хочу, чтобы флажок отображался с каждым элементом списка (это работает).Когда пользователи нажимают на флажок, textDecoration = "line-through" должен проходить через класс listItem.Это означает, что линия проходит через задачу, которую создает человек.Вот код, с которым я в основном работаю:
function show() {
var todos = get_todos();
var html = '<ul>';
for(var i=0; i < todos.length; i++) {
html += '<span><li class="listItem" style="float:left;">' + todos[i] + '</li><input class="checkBox" type="checkbox">' + '<button class="remove" id="' + i + '"><i class="fa fa-trash" aria-hidden="true"></i></button></span><br/>';
};
html += '</ul>';
document.getElementById('todos').innerHTML = html;
var buttons = document.getElementsByClassName('remove');
for (var i=0; i < buttons.length; i++) {
buttons[i].addEventListener('click', remove);
};
////////////////////////////////////
//Everything above here works. Below is the checkbox issue
var checkBox = document.getElementsByClassName("checkBox");
var listItem = document.getElementsByClassName("listItem");
for (var i=0; i < checkBox.length; i++) {
if (checkBox.checked == true){
listItem.style.textDecoration = "line-through";
}else {
listItem.style.textDecoration = "none";
}
};}
Где я сейчас нахожусь, если я создаю функцию onClick в исходном флажке, я могу использовать это выражение if / else и это работает,Это не будет работать, если я установлю переменные checkBox / listItems, используя document.getElementsByClassName, но это будет работать, если я буду использовать document.getElementById.Проблема в том, что он работает только с первой задачей, которую создает пользователь, и ни с одной другой, созданной после.Я предполагаю, что это либо потому, что идентификаторы работают только для одного элемента (в отличие от класса, который работает для нескольких), либо потому, что он не циклически повторяет цикл for, как в приведенном выше коде.
TL / DR В основном, когда я запускаю приведенный выше код, я получаю «Uncaught TypeError: Невозможно установить свойство 'textDecoration' undefined на шоу (todo.js: 57) в todo.js: 75 ".
Я не получаю эту ошибку, когда создаю отдельную функцию для флажка и использую elementbyid вместо elementsbyclass (изменяя id / class в разделе html выше)
Iочень хочется, чтобы эти сквозные эффекты работали над всеми задачами, а не только над первой.Любые идеи с благодарностью.Спасибо всем!