Top.Mail.Ru
Ответы

Помогите с заданием по js пожалуйста

Никак не получается сделать, я дурак не понимаю в чем проблема. Сделал контекстное меню но при нажатии Done! выделяется не один чекбокс а сразу все, а при изменении текста выделенный текст меняется, но все остальные пункты списка становятся пустыми
код js:
let list = document.querySelector('#list');
let btn = document.querySelector('#btn');
let text = document.querySelector('#text');
let menu = document.querySelector('#menu');

let item1 = document.querySelector('#item1')
let item2 = document.querySelector('#item2')
let item3 = document.querySelector('#item3')

btn.addEventListener('click', function() {
if (text.value) {
let child = document.createElement('li');
let div = document.createElement('div');
let check = document.createElement('input');
let txt = document.createElement('p');
check.type = 'checkbox';
txt.textContent = text.value;

div.appendChild(check);
div.appendChild(txt);
child.appendChild(div);
list.appendChild(child);
text.value = '';

// Обработчик для изменения цвета текста
check.addEventListener('change', function() {
txt.style.color = check.checked ? 'gray' : 'black';
});

// Обработчик для контекстного меню
txt.addEventListener('contextmenu', function(event) {
event.preventDefault();
menu.style.top = `${event.pageY}px`;
menu.style.left = `${event.pageX}px`;
menu.style.display = 'block';
});
item1.addEventListener('click', function(){
check.checked = true;
})

item2.addEventListener('click', function(){
text.value = txt.textContent;
text.focus();
function change(){
txt.textContent = text.value;
text.value = null;
text.removeEventListener('blur', change);
}
text.addEventListener('blur', change);
})
}

});

// Скрытие контекстного меню при клике в любом месте
window.addEventListener('click', function() {
menu.style.display = 'none';
});

По дате
По Рейтингу
Аватар пользователя
Мастер
1мес

let list = document.querySelector('#list');
let btn = document.querySelector('#btn');
let text = document.querySelector('#text');
let menu = document.querySelector('#menu');

let item1 = document.querySelector('#item1');
let item2 = document.querySelector('#item2');
let item3 = document.querySelector('#item3');

// Переменные для хранения текущего выбранного элемента
let currentCheckbox = null;
let currentText = null;

btn.addEventListener('click', function() {
if (text.value) {
let child = document.createElement('li');
let div = document.createElement('div');
let check = document.createElement('input');
let txt = document.createElement('p');
check.type = 'checkbox';
txt.textContent = text.value;

div.appendChild(check);
div.appendChild(txt);
child.appendChild(div);
list.appendChild(child);
text.value = '';

// Обработчик для изменения цвета текста
check.addEventListener('change', function() {
txt.style.color = check.checked ? 'gray' : 'black';
});

// Обработчик для контекстного меню
txt.addEventListener('contextmenu', function(event) {
event.preventDefault();
menu.style.top = `${event.pageY}px`;
menu.style.left = `${event.pageX}px`;
menu.style.display = 'block';

// Сохраняем текущий элемент
currentCheckbox = check;
currentText = txt;
});
}
});

// Обработчики для пунктов контекстного меню (вне функции создания элементов)
item1.addEventListener('click', function() {
if (currentCheckbox) {
currentCheckbox.checked = true;
// Обновляем цвет текста
if (currentText) {
currentText.style.color = 'gray';
}
}
});

item2.addEventListener('click', function() {
if (currentText) {
text.value = currentText.textContent;
text.focus();

function change() {
if (currentText) { // Проверка, что текущий элемент всё ещё существует
currentText.textContent = text.value;
text.value = '';
}
text.removeEventListener('blur', change);
}

text.addEventListener('blur', change);
}
});

// Добавляем функцию для item3 если нужно
item3.addEventListener('click', function() {
// Ваш код для действия третьего пункта
});

// Скрытие контекстного меню при клике в любом месте
window.addEventListener('click', function() {
menu.style.display = 'none';
});