Удаление EventListener после его вызова

170
31 августа 2018, 02:30

Создать сообщение - работает. Удалить сообщение - не работает. Оно должно удалять только что созданное через "Создать сообщение" событие.

document.getElementsByTagName('span')[0].addEventListener('click', message); 
 
function message(){ 
 let message = document.createElement('textarea'); 
 document.body.appendChild(message); 
} 
 
document.getElementsByTagName('span')[1].removeEventListener('click', message);
span { 
	 cursor: pointer; 
	 margin: 10px; 
} 
 span img { 
	 width: 16px; 
	 height: 16px; 
	 margin-right: 5px; 
} 
 textarea { 
	 display: block; 
	 margin: 30px 0 0 0; 
} 
 
<span>&#43; Создать сообщение 	</span> 
<span>&#45; Удалить сообщение 	</span> 
<span>&#9998; Редактировать сообщение 	</span> 
<span><img src="https://cdn3.iconfinder.com/data/icons/text-icons-1/512/BT_save-512.png" alt="">Сохранить сообщение </span> 
 
 

Answer 1

Удаление EventListener после его вызова. Оно должно удалять только что созданное через "Создать сообщение" событие.

Вот так.

Если правильно понял, что вы пытаетесь удалить.

//---------------------------------------------------------------- 
// Можно так 
document.querySelector('.add').addEventListener('click', message); 
 
function message() { 
  let message = document.createElement('textarea'); 
  document.body.appendChild(message); 
} 
// Можно так  
document.querySelector('.del').removeEventListener('click', message); 
 
//---------------------------------------------------------------- 
// Кнопка удалить 
var del = document.querySelector(".del"); 
// Вешаем событие 
del.addEventListener("click", function() { 
  // Все созданные textarea 
  var textA = document.querySelectorAll('textarea'); 
  if (textA.length > 0) { // Если есть, что удалять 
    // Удалить последнее созданное поле 
    document.body.removeChild(textA[textA.length - 1]); 
  } 
})
span { 
  cursor: pointer; 
  margin: 10px; 
} 
 
span img { 
  width: 16px; 
  height: 16px; 
  margin-right: 5px; 
} 
 
textarea { 
  display: block; 
  margin: 30px 0 0 0; 
}
<!-------- Лучше так, класс каждому елементу, так читабельней --------> 
<span class="add">&#43; Создать сообщение 	</span> 
<span class="del">&#45; Удалить сообщение 	</span> 
<span class="edit">&#9998; Редактировать сообщение 	</span> 
<span class="save"><img src="https://cdn3.iconfinder.com/data/icons/text-icons-1/512/BT_save-512.png" alt="">Сохранить сообщение </span>

READ ALSO
Улучшить код крестиков-ноликов

Улучшить код крестиков-ноликов

Решил втянуться в ООП, написал простейшие крестики-нолики, но с отсутствием опыта в этой области не знаю, что сделал не так, и как это улучшитьНадеюсь...

157
как переписать на функциональный стиль?

как переписать на функциональный стиль?

Как сделать в функиональном стилеФункция возвращает true, если найдены limit совпадений

163
Как сделать, чтобы при сборке проекта Vue.js (webpack-simple) url изображений оставались на своих местах?

Как сделать, чтобы при сборке проекта Vue.js (webpack-simple) url изображений оставались на своих местах?

Как сделать, чтобы при сборке проекта Vuejs (webpack-simple) url изображений оставались на своих местах? А то при сборке у меня образовались непонятные...

158
Отменить переключение клавишами по tabs?

Отменить переключение клавишами по tabs?

Не могу понять как отключить переключение между табами клавиатурой? Свойство data-wrap-on-keys="false" почему-то не срабатываетМожет кто то сталкивался?

400