Всем очередной раз привет!
Все еще пилю тудушку своими кривыми ручками и в очередной раз закипает голова и ничего не понимаю.
Хочу прилепить функцию редактирования выбранной задачи. При нажатии на кнопку "Edit" должна меняться кнопка "Добавить" на "Изменить". И при нажатии на кнопку "Изменить" должна меняться кнопка обратно на "Добавить". Вроде я это криво-косо сделал. Но кнопка "Добавить"\"Изменить" меняется туда-сюда постоянно после нажатия кнопки "Edit". Помогите, пожалуйста, сделать так, как описано в начале сообщения, плиз. Надеюсь понятно объяснил.
Остальной функционал по редактированию попробую доделать сам
И еще сразу вопрос мимо темы. Что бы при нажатии на кнопку "Del" и "Edit" не происходил чекед пункта, нужно ограничить его с помощью CSS или вынести кнопки из li?
<!DOCTYPE html>
<html>
<head>
<title>Приложение To-Do List</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="index.css">
</head>
<body>
<div id="todo">
<h1>Мой список дел</h1>
<p1 id="p1">Всего задач:</p1>
<p2 id="p2">Задач активно:</p2>
<input type="text" placeholder="Добавить список" class="title">
<button id='addEdd' type="text" class="addBtn editBtn"></button>
<ul class="todos">
<li>
<span calss="todo-text">
Прикрутить добавление по ентер
</span>
<span class="todo-trash">
<button class="trash" type="text"></button>
</span>
<span class="todo-edit">
<button class="edit" type="text"></button>
</span>
</li>
<li>
<span calss="todo-text">
Добавить кнопку к инпут
</span>
<span class="todo-trash">
<button class="trash" type="text"></button>
</span>
<span class="todo-edit">
<button class="edit" type="text"></button>
</span>
</li>
</ul>
<div id="buttons">
<button class="clear">Очистить</button>
</div>
<select class="todo__options">
<option value="active">активные</option>
<option value="completed">завершённые</option>
<option value="deleted">удалённые</option>
</select>
</div>
<script type="text/javascript" src="index.js"> </script>
</body>
</html>
'use strict';
function ToDo() {
const input = document.querySelector("input.title");
const addBtn = document.querySelector("#addEdd");
const clearButton = document.querySelector("button.clear");
const ul = document.querySelector("ul.todos");
const allTasks = document.querySelector('#p1');
const activeTasks = document.querySelector('#p2');
let tasks = [];
addBtn.classList.toggle('editBtn');
ul.addEventListener("click", onClickTodo);
ul.querySelectorAll('li').forEach(n => {
listenDeleteTodo(n.querySelector('.todo-trash'), n)
});
ul.querySelectorAll('li').forEach(n => {
editTask(n.querySelector('.todo-edit'), n)
});
let list = document.querySelectorAll('ul.todos > li');
tasks.push(...list);
allTask();
clearButton.addEventListener("click", () => {
ul.innerHTML = "";
localStorage.removeItem('todos', ul.innerHTML);
tasks.length = 0;
allTask();
});
function todoAdd() {
const li = document.createElement('li');
const textSpan = document.createElement("span");
textSpan.classList.add("todo-text");
const newTodo = input.value;
textSpan.append(newTodo);
const deleteButton = document.createElement('span');
deleteButton.classList.add("todo-trash");
const button = document.createElement("button");
button.type = 'text';
button.classList.add("trash");
deleteButton.appendChild(button);
const editBtn = document.createElement('span');
editBtn.classList.add('todo-edit');
const buttonEd = document.createElement("button");
buttonEd.type = 'text';
buttonEd.classList.add('edit');
editBtn.appendChild(buttonEd);
tasks.push(li);
allTask();
ul.appendChild(li).append(textSpan, deleteButton, editBtn);
input.value = "";
input.focus();
listenDeleteTodo(deleteButton, li);
editTask(editBtn, li);
}
function onClickTodo(event) {
let target = event.target.closest("LI");
if (target) {
target.classList.toggle("checked");
allTask();
}
}
addBtn.addEventListener('click', () => {
if (input.value.trim().length) {
todoAdd();
}
})
input.addEventListener('keydown', (e) => {
if (input.value.trim().length && e.keyCode === 13) {
todoAdd();
}
})
function listenDeleteTodo(button, i) {
button.addEventListener("click", (event) => {
event.preventDefault();
i.remove();
tasks.splice(tasks.indexOf(i), 1);
allTask();
});
}
function allTask() {
let count = tasks.length;
let checked = tasks.filter(li => li.classList.contains('checked')).length
allTasks.textContent = `Всего задач: ${count}`;
activeTasks.textContent = `Задач активно: ${count - checked}`;
}
function editTask(button, i) {
button.addEventListener("click", (event) => {
console.log('edit');
input.value = i.textContent;
addBtn.classList.toggle('editBtn');
toggleBtn();
});
}
function toggleBtn () {
let editBtn = document.querySelector(".editBtn");
editBtn.addEventListener('click', (event) => {
editBtn.classList.toggle('editBtn');
event.preventDefault();
})
}
}
document.addEventListener("DOMContentLoaded", ToDo);
Код:
|
button.addBtn::after {
content: "Добавить";
}
button.editBtn::after {
content: "Изменить";
}
button.trash::after {
content: "Del";
}
button.trash {
background-color: none;
border: none;
color: gray;
padding: 8px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 11px;
border-radius: 50%;
}
button.edit::after {
content: "Edit";
}
button.edit {
background-color: none;
border: none;
color: gray;
padding: 8px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 11px;
border-radius: 50%;
}
.todos li {
cursor: pointer;
font-size: 15px;
padding: 3px 0px;
}
.checked {
color: gray;
text-decoration: line-through;
}
.todos li span.todo-text {
padding: 10px 0px;
}
#todo {
margin: 0 auto;
max-width: 350px;
height: 100%;
background: white;
position: relative;
} |