@dch3

Странное поведение скрипта js?

html разметка
...
<table>

   <tr>
      <td hidden>1</td>
      <td><input type="checkbox"></td>
      <td>a1</td>
      <td>b1</td>
   </tr>

   <tr>
      <td hidden>2</td>
      <td><input type="checkbox"></td>
      <td>a2</td>
      <td>b2</td>
   </tr>

   <tr>
      <td hidden>3</td>
      <td><input type="checkbox"></td>
      <td>a3</td>
      <td>b3</td>
   </tr>

</table>
  ...

<button type="button" name="remove">Удалить</button>


скрипт js
const destroyBtn = document.querySelector('button[name="remove"]');
const hidden = document.querySelectorAll('td[hidden]');
const checkbox = document.querySelectorAll('td > input');

for (let i = 0; i < checkbox.length; i++) {
   checkbox[i].addEventListener('change', () => {
      if (checkbox[i].checked) {
         let id = hidden[i].innerHTML;         
         destroyBtn.addEventListener('click', () => { console.log(id )};


В итоге, поочередно ставя флажки в чекбоксах с 1-го по 3-й (т.е. ставлю на 1-й и нажимаю "удалить";
снимаю флажок с 1-го, ставлю на 2-й и нажимаю "удалить" и т.д.) и нажимая кнопку удалить, я получаю следующий вывод:
1
*****
2
*****
1
2
3
***

Почему третий вывод отображает сразу все три значения, а не одно значение "3"?
Спасибо за ответы!
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
у вас и во втором случае выводится не 2 ***, а 1 *** 2 ***.
вы добавляете обработчик на каждый раз, а не переопределяете его. вот они и срабатывают все. сначала только 1 обработчик клика, потом 2, потом 3.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы