![](/img/trans.png)
[英]Select and add an event listener to an element inside a template literal string
[英]Add event listener to button inside template literal
我將此模板文字插入具有forEach循環的表中。 如何在每次迭代中將事件偵聽器附加到按鈕?
這只是將事件偵聽器附加到表中的第一個按鈕:
function renderMenu(doc) {
const table = `
<tr data-id=${doc.id}>
<td>${doc.data().number}</td>
<td>${doc.data().name}</td>
<td>${doc.data().ingredients}</td>
<td>${doc.data().price}</td>
<td>${doc.data().category}</td>
<td><button class="btn-remove">Delete</button></td>
</tr>`
menu.insertAdjacentHTML('beforeend', table)
let removeBtn = document.querySelector('.btn-remove')
//Delete items
removeBtn.addEventListener('click', (e) => {
e.preventDefault()
...
})
}
您可以做的是向按鈕添加一個data-
屬性:
`... <button data-remove-button-id="${doc.id}"> ...`
並將其定位為:
document.querySelector(`[data-remove-button-id="${doc.id}"]`);
演示 (我可以自由命名一些東西):
const table = document.querySelector('[data-my-table]'); function addDoc(doc) { const row = ` <tr data-id=${doc.id}> <td>${doc.number}</td> <td>${doc.name}</td> <td>${doc.ingredients}</td> <td>${doc.price}</td> <td>${doc.category}</td> <td><button data-remove-button-id="${doc.id}" class="btn-remove">Delete</button></td> </tr>`; table.insertAdjacentHTML('beforeend', row); const removeBtn = document.querySelector(`[data-remove-button-id="${doc.id}"]`); removeBtn.addEventListener('click', e => { console.log(`deleted row ${e.target.dataset.removeButtonId}`); }); } addDoc({id: 1, number: 1, name: 'foo', ingredients: 'salt', price: 8.5, category: 'food'}); addDoc({id: 2, number: 2, name: 'foo', ingredients: 'salt', price: 8.5, category: 'food'}); addDoc({id: 3, number: 3, name: 'foo', ingredients: 'salt', price: 8.5, category: 'food'});
<table data-my-table></table>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.