Почему делегирование не работает?

125
16 ноября 2019, 03:00

var message = document.querySelector('#messages-container'); 
var buttons = document.querySelector('.remove-button'); 
 
message.onclick = function(event){ 
  var target = event.target; 
 
    if(target == 'button'){ 
    target.removeChild('button'); 
  } 
}
    <div id="messages-container"> 
    <div class="pane"> 
      <h3>Лошадь</h3> 
      <p>Домашняя лошадь — животное семейства непарнокопытных, одомашненный и единственный сохранившийся подвид дикой лошади, вымершей в дикой природе, за исключением небольшой популяции лошади Пржевальского.</p> 
      <button class="remove-button">[x]</button> 
    </div> 
    <div class="pane"> 
      <h3>Осёл</h3> 
      <p>Домашний осёл или ишак — одомашненный подвид дикого осла, сыгравший важную историческую роль в развитии хозяйства и культуры человека. Все одомашненные ослы относятся к африканским ослам.</p> 
      <button class="remove-button">[x]</button> 
    </div> 
    <div class="pane"> 
      <h3>Корова, а также пара слов о диком быке, о волах и о тёлках. </h3> 
      <p>Коро́ва — самка домашнего быка, одомашненного подвида дикого быка, парнокопытного жвачного животного семейства полорогих. Самцы вида называются быками, молодняк — телятами, кастрированные самцы — волами. Молодых (до первой стельности) самок называют 
        тёлками. 
      </p> 
      <button class="remove-button">[x]</button> 
    </div> 
  </div>

  1. Выбираем родительский контейнер var message = document.querySelector('#messages-container');
  2. Переменной message вешаем обработчик события и присваиваем ей функцию где первой аргумент объект события
  3. В переменную target присваиваем элемент на котором произошло событие его можно получить event.target
  4. Идет условие если оно true идет удаление элемента
  5. где у меня ошибка ?
Answer 1

Первое.

var buttons = document.querySelector('.remove-button');

querySelector возвращает первый элемент, соответствующий селектору. У Вас таких кнопок много, нужно использовать querySelectorAll.

Второе.

if(target == 'button'){

Вы сравниваете элемент DOM-a со строкой. Естественно, они не равны.

Третье.

target.removeChild('button');

Кто же так удаляет элементы?

document.querySelector('#messages-container').onclick = function(event) { 
  var target = event.target; 
  if(target.classList.contains('remove-button')) { 
    this.removeChild(target.parentNode); 
  } 
};
<div id="messages-container"> 
    <div class="pane"> 
      <h3>Лошадь</h3> 
      <p>Домашняя лошадь — животное семейства непарнокопытных, одомашненный и единственный сохранившийся подвид дикой лошади, вымершей в дикой природе, за исключением небольшой популяции лошади Пржевальского.</p> 
      <button class="remove-button">[x]</button> 
    </div> 
    <div class="pane"> 
      <h3>Осёл</h3> 
      <p>Домашний осёл или ишак — одомашненный подвид дикого осла, сыгравший важную историческую роль в развитии хозяйства и культуры человека. Все одомашненные ослы относятся к африканским ослам.</p> 
      <button class="remove-button">[x]</button> 
    </div> 
    <div class="pane"> 
      <h3>Корова, а также пара слов о диком быке, о волах и о тёлках. </h3> 
      <p>Коро́ва — самка домашнего быка, одомашненного подвида дикого быка, парнокопытного жвачного животного семейства полорогих. Самцы вида называются быками, молодняк — телятами, кастрированные самцы — волами. Молодых (до первой стельности) самок называют 
        тёлками. 
      </p> 
      <button class="remove-button">[x]</button> 
    </div> 
  </div>

READ ALSO
Vue.JS Image Cropper

Vue.JS Image Cropper

Всем приветПишу приложение на Vue

127
Как проверить не содержит ли массив объект?

Как проверить не содержит ли массив объект?

У меня есть массив объектов который динамически получает данные от сервера и каждый раз записывает в stateINCLUDES не работает!

126
подсказка при наведение на блок

подсказка при наведение на блок

Необходимо повторить подобное

141
Как из двух баз сделать одну?

Как из двух баз сделать одну?

Получилось так, что одну и ту базу дорабатывали на двух машинахВ обеих встречаются повторяющиеся значения; названия таблиц одинаковые, кол-во...

155