#javascript
Вопрос:
У меня есть список дел с CRUD. Я только что внедрил счетчик задач, чтобы показать количество задач, которые осталось выполнить. Количество увеличивается/уменьшается с проверкой/снятием отметок элементов и уменьшается при удалении элементов. За исключением одной проблемы. По какой-то причине в последнем удаленном элементе счетчик остается на 1 вместо 0. Полный кодовый набор
Вот что я попробовал:
function renderTaskCount() {
const incompleteTaskCount = todos.filter((item) => !item.completed).length;
const taskString = incompleteTaskCount === 1 ? 'task' : 'tasks';
listCountElement.innerText = `${incompleteTaskCount} ${taskString} remaining`;
return incompleteTaskCount;
}
const renderTodos = () => {
ul.innerHTML = '';
todos.forEach((item) => {
let li = document.createElement('LI');
li.setAttribute('class', 'item');
li.setAttribute('data-key', item.id);
const itemText = createTodoText(item);
const cb = buildCheckbox(item);
const db = buildDeleteButton(item);
li.append(cb);
li.append(db);
li.append(itemText);
ul.append(li);
//update height of textarea
updateHeight(itemText);
renderTaskCount();
});
};
Комментарии:
1. Ваш код (прочитанный с минимальной предоставленной информацией) не подразумевает, что это вообще должно произойти, так что, может быть, вы просто не удаляете последний элемент?
2. Вы не должны использовать
if ( input !== '' ) {
вместо этого использоватьif ( input.trim() !== '' ) {
3. @decpk Я внесу это изменение. Приятно это знать. Спасибо
Ответ №1:
У тебя есть
const renderTodos = () => {
ul.innerHTML = '';
todos.forEach((item) => {
let li = document.createElement('LI');
li.setAttribute('class', 'item');
li.setAttribute('data-key', item.id);
const itemText = createTodoText(item);
const cb = buildCheckbox(item);
const db = buildDeleteButton(item);
li.append(cb);
li.append(db);
li.append(itemText);
ul.append(li);
//update height of textarea
updateHeight(itemText);
renderTaskCount();
});
};
где renderTaskCount
обновляется количество — что делается в конце каждой итерации. Поэтому, если todos
массив пуст, счетчик никогда не будет обновлен. Тебе нужно
const renderTodos = () => {
ul.innerHTML = '';
todos.forEach((item) => {
// ...
});
renderTaskCount();
};
так что независимо renderTaskCount
от того, выполняется ли todos
заполнение массива или нет.
Комментарии:
1. В этом есть прекрасный смысл. Я все еще учусь, где и как применять логику. Спасибо