let resa = document.querySelector('.todo_ul');
let addLi = document.querySelector('.todo_add');
let inputLi = document.querySelector('.todo_input');
// Событие на кнопку "Добавить"
addLi.addEventListener('click',function(e){
//Отключает перезагрузку страниц
e.preventDefault();
let ul = document.querySelector('.todo_ul');
//В список при нажатии на кнопку "Добавить" добавляется новый элемент списка со значением из инпута
ul.appendChild(addNewLi(inputLi.value))
//Очищаем инпут
inputLi.value = '';
});
//Функция для создания элемента списка
function addNewLi(value){
if(value === ''){
return false
};
//Создаем элемент списка
let li = document.createElement('li');
//Добавляем ему класс
li.className = 'todo_li';
//Создаем кнопку 'Check'
let divInLi = document.createElement('div');
//Добавляем кнопке класс
divInLi.className = 'todo_check';
//Создаем кнопку "Изменить" для изменения значения элемента списка
let changeButton = document.createElement('input');
//Добавляем кнопке "Изменить" атрибуты
changeButton.setAttribute('type','button');
changeButton.setAttribute('value','Изменить');
//Добавляем кнопке "Изменить" классы
changeButton.className = 'todo_li_change li_button';
//Создаем кнопку "Удалить" для удаления элемента списка
let deleteButton = document.createElement('input');
//Добавляем кнопке "Удалить" атрибуты
deleteButton.setAttribute('type','button');
deleteButton.setAttribute('value','Удалить');
//Добавляем кнопке "Удалить" классы
deleteButton.className = 'todo_li_delete li_button';
//Создаем кнопку "Сохранить" для сохранения измененого значения в элемент списка
let saveButton = document.createElement('input');
//Добавляем кнопке "Удалить" атрибуты
saveButton.setAttribute('type','button');
saveButton.setAttribute('value','Сохранить');
//Добавляем кнопке "Удалить" классы
saveButton.className = 'save_change_item li_button';
//Создаем поле для изменения значения элемента списка
let saveInput = document.createElement('input');
//Добавляем полю атрибуты
saveInput.setAttribute('type','text');
//Добавляем полю классы
saveInput.className += 'change_item';
//Создаем текстовое поле, куда будет записанно значение элемента списка
let p = document.createElement('p');
//Добавляем полю класс
p.className = 'li_text';
//В него записываем значение параметра
p.innerHTML = value;
//Все созданные элементы добавлчем в новый элемент списка
li.appendChild(p);
li.appendChild(divInLi);
li.appendChild(changeButton);
li.appendChild(deleteButton);
li.appendChild(saveButton);
li.appendChild(saveInput);
//Выполняить функцию, а качестве аргумента - нвоый созданый элемент списка
doEvent(li);
return li
};
//функция для создания событий на элементы внутри элемента списка
function doEvent(toDoItem){
let toDoLi = toDoItem.querySelector('.todo_check');
let changeButton = toDoItem.querySelector('.todo_li_change');
let deleteButton = toDoItem.querySelector('.todo_li_delete');
let saveButton = toDoItem.querySelector('.save_change_item');
saveButton.addEventListener('click',saveItem);
toDoItem.addEventListener('click',changeItem);
toDoItem.addEventListener('mouseout',itemHidden);
toDoItem.addEventListener('mouseover',itemShow);
toDoLi.addEventListener('click',checkBox);
changeButton.addEventListener('click',changeBox);
deleteButton.addEventListener('click',deleteBox);
}
//При нажатии на кнопку "Check" добавляем или удаляет класс кнопке "Check" и элементу списка
function checkBox(){
this.classList.toggle('check');
this.parentNode.classList.toggle('checked')
}
//При нажатии на элемент списка или его текст добавляем или удаляет класс кнопке "Check" и элементу списка
function changeItem(e) {
if(e.target.nodeName == 'LI'){
let check = e.target.querySelector('.todo_check');
e.target.classList.toggle('checked');
check.classList.toggle('check');
}else if(e.target.nodeName == 'P'){
let check = e.target.parentNode.querySelector('.todo_check');
e.target.parentNode.classList.toggle('checked');
check.classList.toggle('check');
}
}
//При нажатии на кнопку "Измнеить", будут показаны поле ввода со значением из элемента списка и кнопка "Сохранить", для изменения значения элемента списка и его сохранения, кнопки "Изменить" "Удалить" будут скрыты
function changeBox(){
let save = this.parentNode.querySelector('.save_change_item');
let saveInput = this.parentNode.querySelector('.change_item');
let deleteButton = this.parentNode.querySelector('.todo_li_delete');
let litext = this.parentNode.querySelector('.li_text');
saveInput.value = litext.innerHTML;
save.style.visibility = 'visible';
saveInput.style.visibility = 'visible';
this.className += ' disp_none';
deleteButton.className += ' disp_none';
}
//При нажатии на кнопку "Сохранить", значение поля ввода будет сохранено в значение элемента списка, поле ввода и кнопка "Сохранить" будут скрыты, кнопки "Изменить" "Удалить" будут снова видны
function saveItem(){
let saveInput = this.parentNode.querySelector('.change_item');
let litext = this.parentNode.querySelector('.li_text');
litext.innerText = saveInput.value;
let save = this.parentNode.querySelector('.save_change_item');
let deleteButton = this.parentNode.querySelector('.todo_li_delete');
let chandeButton = this.parentNode.querySelector('.todo_li_change');
save.style.visibility = 'hidden';
saveInput.style.visibility = 'hidden';
deleteButton.classList.remove('disp_none')
chandeButton.classList.remove('disp_none')
}
//Удаление элемента списка при нажатии на кнопку "Удалить"
function deleteBox(){
this.parentNode.remove()
}
//При наведении на элемент списка будут показаны кнопки "Изменить" "Удалить"
function itemShow(){
this.querySelector('.todo_li_change').style.visibility = 'visible';
this.querySelector('.todo_li_delete').style.visibility = 'visible';
}
// При выходе курсора с элемента списка кнопки "Изменить" "Удалить" будут скрыты
function itemHidden(){
this.querySelector('.todo_li_change').style.visibility = 'hidden';
this.querySelector('.todo_li_delete').style.visibility = 'hidden';
}
Код моей тудушки, думаю у меня серьезные проблемы с созданием красиво и читабельного кода, хотел бы к вам обратиться, чтобы помогли с этим, код как надо работает