Здравствуйте, что вы имеете ввиду под “берется”, это стандартный слушатель, туда можно и обычную функцию написать, все будет работать. Выложите код с html+css+js на codepen, укажите комментарием, где конкретно не работает - посмотрю.
// Контейнер для карточек
let chatContent = document.querySelector(’.chat-content’);
// Получаем шаблон карточки
let taskMessage = document.querySelector(’#message-template’).content;
let newItemTemplate = taskMessage.querySelector(’.chat-message’);
//Поле ввода
let chatForm = document.querySelector(’.chat-form’);
let newItemTitle = chatForm.querySelector(’.chat-form-input’);
//Получаем сообщение из поля ввода
chatForm.addEventListener(‘submit’, function (evt) {
evt.preventDefault();
let taskText = newItemTitle.value;
let clonedElement = newItemTemplate.cloneNode(true);
let taskDescription = clonedElement.querySelector(‘p’);
taskDescription.textContent = taskText;
chatContent.appendChild(clonedElement);
newItemTitle.value = ‘’;
let deleteMessage = clonedElement.querySelector(".chat-message-button"); // Кнопка закрыть
deleteMessage.addEventListener('click', function () {
clonedElement.remove();
});
});
Кто подскажет, почему не работает удаление?
Пишет ошибку TypeError
: deleteMessageButton is null
var chat = document.querySelector('.chat-content');
var items = chat.children;
var newMessageForm = document.querySelector('.chat-form');
var newItemTitle = newMessageForm.querySelector('.chat-form-input');
var messageTemplate = document.querySelector("#message-template").content;
var newItemTemplate = messageTemplate.querySelector('.chat-message');
newMessageForm.addEventListener('submit', function (evt) {
evt.preventDefault();
var messageText = newItemTitle.value;
var message = messageTemplate.cloneNode(true);
var messageContent = message.querySelector('.chat-message-text');
messageContent.textContent = messageText;
chat.appendChild(message);
deleteMessageHandler(message);
newItemTitle.value = '';
});
var deleteMessageHandler = function (item) {
var deleteMessageButton = item.querySelector('.chat-message-button');
deleteMessageButton.addEventListener('click', function () {
item.remove();
});
};
for (var i = 0; i < items.length; i++) {
deleteMessageHandler(items[i]);
};
var list = document.querySelector('.chat-content');
var items = list.childer;
var messageTemplate = document.querySelector('#message-template').content;
var newMessage = messageTemplate.querySelector('.chat-message');
var input = document.querySelector('.chat-form-input')
var form = document.querySelector('.chat-form');
//Функция для удаления
var deleteHandler = function (item) {
var deleteMessage = item.querySelector('.chat-message-button');
deleteMessage.addEventListener('click', function () {
item.remove();
});
};
// Добавление сообщения
form.addEventListener('submit', function(evt) {
evt.preventDefault();
var youText = input.value;
var youTemplate = newMessage.cloneNode(true);
var youMessage = youTemplate.querySelector('p');
youMessage.textContent = youText;
deleteHandler(youTemplate);
list.appendChild(youTemplate);
input.value = '';
});
let chat = document.querySelector('.chat-content');
let chatForm = document.querySelector('.chat-form');
let chatFormInput = chatForm.querySelector('.chat-form-input');
let template = document
.querySelector('#message-template')
.content.querySelector('.chat-message');
chatForm.addEventListener('submit', (evt) => {
evt.preventDefault();
let textMessage = chatFormInput.value;
let newMessage = template.cloneNode(true);
let textDescription = newMessage.querySelector('.chat-message-text');
textDescription.textContent = textMessage;
chat.appendChild(newMessage);
chatFormInput.value = '';
chatMessageDelete(newMessage);
})
function chatMessageDelete (item) {
let closeButton = item.querySelector('.chat-message-button');
closeButton.addEventListener('click', function () {
item.remove();
});
}
Функцию ( Function Expression) выше прослушивателя подними, иначе прослушиватель её не видит.
Ниже можно объявлять только (Function Declaration)
в твоём варианте
function deleteMessageHandler (item) {
}
Ещё один вариант, мне кажется годным:
const chat = document.querySelector('.chat-content');
const chatForm = document.querySelector('.chat-form');
const chatFormInput = chatForm.querySelector('.chat-form-input');
const messageTemplate = document
.querySelector('#message-template')
.content.querySelector('.chat-message');
const generateMessageFromTemplate = (template, text) => {
const message = template.cloneNode(true);
const messageText = message.querySelector('.chat-message-text');
messageText.textContent = text;
message
.querySelector('.chat-message-button')
.addEventListener('click', () => message.remove());
return message;
};
chatForm.addEventListener('submit', (event) => {
event.preventDefault();
const newMessage = generateMessageFromTemplate(
messageTemplate,
chatFormInput.value
);
chat.appendChild(newMessage);
chatFormInput.value = '';
});
Получился такой дефолт
var chatContent = document.querySelector(’.chat-content’);
var chatForm = document.querySelector(’.chat-form’);
var chatFormInput = chatForm.querySelector(’.chat-form-input’);
var messageTemplate = document.querySelector(’#message-template’).content;
var chatMessage = messageTemplate.querySelector(’.chat-message’);
var addClickHandler = function(chatItem){
var buttonDeleteMessage = chatItem.querySelector(’.chat-message-button’);
buttonDeleteMessage.addEventListener(‘click’, function(){
chatItem.remove();
});
}
chatForm.addEventListener(‘submit’, function(event){
event.preventDefault();
var formInputValue = chatFormInput.value;
var message = chatMessage.cloneNode(true);
var messageText = message.querySelector(’.chat-message-text’);
messageText.textContent = formInputValue;
addClickHandler(message);
chatContent.appendChild(message);
chatFormInput.value = ‘’;
});
Вот мое
var messageTemplate = document.querySelector('#message-template');
var chatContent = document.querySelector('.chat-content');
var chatForm = document.querySelector('.chat-form');
var chatFormInput = document.querySelector('.chat-form-input');
chatForm.addEventListener('submit', function(evt) {
evt.preventDefault();
var messageText = chatFormInput.value.trim();
if (messageText) {
var messageElement = messageTemplate.content.cloneNode(true);
var messageTextElement = messageElement.querySelector('.chat-message-text');
messageTextElement.textContent = messageText;
chatContent.appendChild(messageElement);
chatFormInput.value = '';
}
});
chatContent.addEventListener('mouseover', function(evt) {
if (evt.target.classList.contains('chat-message')) {
var deleteButton = evt.target.querySelector('.chat-message-button');
deleteButton.style.display = 'block';
}
});
chatContent.addEventListener('mouseout', function(evt) {
if (evt.target.classList.contains('chat-message')) {
var deleteButton = evt.target.querySelector('.chat-message-button');
deleteButton.style.display = 'none';
}
});
chatContent.addEventListener('click', function(evt) {
if (evt.target.classList.contains('chat-message-button')) {
var message = evt.target.closest('.chat-message');
if (message) {
message.remove();
}
}
});
let chatContent = document.querySelector('.chat-content');
let newMsgForm = document.querySelector('.chat-form');
let newMsgInput = document.querySelector('.chat-form-input');
let msgTemplate = document.querySelector('#message-template').content;
let newMsgTemplate = msgTemplate.querySelector('.chat-message');
let delMsgeHandler = function(item) {
let closeButton = item.querySelector('.chat-message-button');
closeButton.addEventListener('click', function() {
item.remove();
});
}
newMsgForm.addEventListener('submit', function(evt){
evt.preventDefault();
let msgText = newMsgInput.value;
let msg = newMsgTemplate.cloneNode(true);
msg.querySelector('.chat-message-text').textContent = msgText;
chatContent.appendChild(msg);
newMsgInput.value = '';
delMsgeHandler(msg);
});
Моё решение. Прохождение 100%.
var messageList = document.querySelector('.chat-content'); // Cписок сообщений
var messageItems = messageList.children; // Все сообщения
var newChatForm = document.querySelector('.chat-form'); // Форма для отправки
var newMessageTitle = newChatForm.querySelector('.chat-form-input'); // Введенный текст
var messageTemplate = document.querySelector('#message-template').content; // Шаблон для сообщения
var newMessageTemplate = messageTemplate.querySelector('.chat-message'); // Новое сообщение по шаблону
newChatForm.addEventListener('submit', function(evt) { // Функция отправки формы
evt.preventDefault(); // Отменяем отправку формы по умолчанию
var messageText = newMessageTitle.value; // Введённый текст добавляем в сообщение
var message = newMessageTemplate.cloneNode(true); // Копируем шаблон
var messageChat = message.querySelector('p');
messageChat.textContent = messageText;
deleteMessageHandler(message);
messageList.appendChild(message);
newMessageTitle.value = '';
});
var deleteMessageHandler = function (messageItem) {
var deleteCheckbox = messageItem.querySelector('.chat-message-button'); // Нашли кнопку удаления
deleteCheckbox.addEventListener('click', function() { // Следим за изменением
messageItem.remove(); // Удаляем сообщение
});
};
for (var i = 0; i < messageItems.length; i++) {
deleteMessageHandler (messageItems[i]);
};
let list = document.querySelector('.chat-content');
let template = document.querySelector('#message-template').content;
let messageTemplate = template.querySelector('.chat-message');
let sendForm = document.querySelector('.chat-form');
let sendInput = sendForm.querySelector('.chat-form-input');
sendForm.addEventListener('submit', function(evt) {
evt.preventDefault();
let newMessage = messageTemplate.cloneNode(true);
let newMessageText = newMessage.querySelector('p');
newMessageText.textContent = sendInput.value;
list.appendChild(newMessage);
deleteMessage(newMessage);
sendInput.value = '';
});
let deleteMessage = function(item) {
let deleteButton = item.querySelector('.chat-message-button');
deleteButton.addEventListener('click', function() {
item.remove();
});
}