Здесь есть две проблемы:
i
не будет значением, которое вы ожидаете в обратном вызове, потому что вы объявили его вне цикла.Посмотрите ответы на этот вопрос, чтобы узнать, почему, но, по сути, вы бы поместили let
внутри for
, чтобы сделать так, чтобы i
ваши обработчики событий были близки к обработчику. Но , в этом нет необходимости, просто используйте вместо этого this
внутри обработчика.
Вы полагаетесь на количество элементов .js-name
, которые должны бытьточно так же, как количество элементов .js-listendelete
.Может быть, это надежно, но есть больше надежный способ.
И дополнительно:
Привязка обработчиков непосредственно к элементам хрупка;если вы добавите больше элементов позже, вам нужно не забыть подключить их.
Вместо этого я бы использовал делегирование события , а затем обошел DOM:
Делегирование события: перехватите click
на таблице (или теле таблицы), а затем посмотрите, прошло ли событие через элемент .js-listendelete
на пути к телу в момент его убирания.
Обход DOM: Если это так, я бы использовал parentNode
или closest()
, чтобы подняться на строку, а затем получить первый td
.
Вот идея, на что это было бы похоже:
document.querySelector("selector-for-your-table").addEventListener("click", function(event) {
const delButton = event.target.closest(".js-listendelete");
if (delButton && this.contains(delButton)) {
const firstCell = delButton.closest("tr").querySelector("td");
if (firstCell) {
// Use firstCell.innerHTML here
}
}
});
Использует closest
на event.target
, чтобы найти .js-listendelete
, в котором щелчок начался или прошел.Если он возвращает не null
, мы гарантируем, что найденное находится в таблице (this.contains(delButton)
).Затем мы находим строку, содержащую его и его первую ячейку.(Если хотите, вы можете использовать .cells[0]
вместо .querySelector("td")
. Эти средства доступа стиля 1990-х годов были стандартизированы.)
Тогда у вас есть только один обработчик событий в таблице,который обрабатывает все кнопки и обрабатывает их, работая внутри дерева DOM, а не предполагает, что параллельные списки узлов действительно параллельны.
Обратите внимание, что closest
равно неопределенно современный, вам может понадобиться полифилл в зависимости от ваших целевых браузеров.