#javascript #events #buttonclick
#javascript #Мероприятия #buttonclick
Вопрос:
Я хочу добавить событие onclick к динамически создаваемым кнопкам на основе данных. Я попытался добавить событие в тот же цикл, в котором создаются кнопки. но работает только событие onclick последней кнопки, а остальные не работают.
если я добавлю отдельный цикл для добавления событий, он будет работать для всех кнопок, как и ожидалось. Я хочу знать, почему я не смог добиться этого в том же цикле. прокомментированный блок — это код, который я пытался добавить внутри цикла для добавления события. Кроме того, пожалуйста, предложите, есть ли какой-либо лучший способ сделать это (просто хочу попробовать без библиотек, без особой причины).
Код:
function a() {
var objContent = document.getElementById('content')
var fruits = ['apple', 'banana', 'orange', 'grapes']
for (var i in fruits) {
var buildHtml = `<div id="content">
<div id="editsection">
<button id="${fruits[i]}" class="buttons" value="${fruits[i]}">${fruits[i]}</button>
</div>
<div id="deletesection">
</div>
</div>`
objContent.innerHTML = buildHtml
**/* var objFruitButton = document.getElementById(fruits[i])
objFruitButton.addEventListener("click", function (){
onClick(objFruitButton.value)
}, false); */**
}
fruits.forEach(function(i) {
var objFruitButton = document.getElementById(i)
objFruitButton.addEventListener("click", function() {
onClick(objFruitButton.value)
})
})
}
function onClick(x) {
console.log("value:", x);
}
a();
<div id="content"></div>
Комментарии:
1. Это проблема с переменной областью видимости. Либо сохраните значение как
data
свойство кнопки и восстановите его в событии click, либо переместите содержимое цикла в функцию, чтобы создать новую область2. Я сделал вам фрагмент, я предположил, что у вас есть div в качестве элемента содержимого id, также я добавил вызов функции a .
3. Спасибо Алексу за редактирование, да, у меня есть div с содержимым в качестве идентификатора, и я выполняю вызов функции.
4. Спасибо, Саймон, текущий код с foreach работает нормально, как и ожидалось. Я задаюсь вопросом, почему блок с комментариями внутри цикла for, в котором я создаю кнопки, не работает. оно добавляет событие только для последней кнопки. Я могу получить доступ к значению кнопки в предупреждении, но только не к событию щелчка. зачем нам нужен отдельный forloop для добавления события click.