#javascript
Вопрос:
** Я хочу, когда нажать на активную кнопку, если установлен флажок для добавления отфильтрованного класса в HTML-элемент, но он не работает и выдает мне неопределенную ошибку в этой строке check.parentElement.classList.add(«отфильтрован»); **
<ul class="ul-list"></ul>
</section>
</main>
<footer class="footer">
<button class="all footer-btn">All</button>
<button class="active footer-btn">Active</button>
<button class="complete footer-btn">Complete</button>
</footer>
let check = document.querySelectorAll(".complete-txt");
let complete_btn = document.querySelector(".complete");
let active_btn = document.querySelector(".active");
let all_btn = document.querySelector(".all");
let edit_list = document.querySelector(".edit-list");
let main_text = document.querySelector(".main-text");
let list_item = document.querySelector(".list-item");
let footer = document.querySelector(".footer");
const generateTemplate = (todo) => {
const html = `
<li class="list-item">
<input type="checkbox" class="complete-txt" name="" id="check"><span class="main-text">${todo}</span><div class="edit-list"></div><div class="delete-list"></div>
</li>
`;
list.innerHTML = html;
};
// add todos event
addForm.addEventListener("submit", (e) => {
e.preventDefault();
const todo = addForm.add.value.trim();
if (todo.length) {
generateTemplate(todo);
addForm.reset();
}
});
active_btn.addEventListener("click", function () {
let check_id = document.querySelector(".complete-txt");
// check.forEach(function () {
debugger;
if (check.checked !== "true") {
check.parentElement.classList.add("filtered");
console.log("hi");
}
// });
// console.log("hi");
console.log("hi");
// console.log(check.checked.value);
});
Комментарии:
1.
querySelectorAll(".complete-txt")
возвращает список узлов, которого в этом списке нетparentElement
, ошибка возникает, когда вы пытаетесь ссылатьсяclassList
undefined
.2. я использую querySelector («.complete-txt») или getElementById, но он не работает
3. существует множество ошибок, «проверка» определена до создания DOM, для onclick active_btn вы определяете «check_id», но используете вышеупомянутую неопределенную «проверку». вы также добавляете флажок в «список», который вы не определили
Ответ №1:
если в более крупном документе исправлены все другие несоответствия, вы сможете изменить список событий на
active_btn.addEventListener("click", function () {
let check_id = document.querySelector(".complete-txt");
if (check_id.checked !== "true") {
check_id.parentElement.classList.add("filtered");
}
});
но!!! это не «исправит» все ваши ошибки, например, определение let check
до создания флажка с помощью generateTemplate