4 回答
TA贡献1893条经验 获得超10个赞
const changeStatus = (e) => { let car = cars[e.target.dataset.row];
它说它无法target
读取undefined
。
因此,e
是undefined
。
因此,查看调用函数的位置:
onclick="changeStatus()"
您没有传递任何参数,因此e
获取默认值undefined
.
不要使用内部事件属性。他们有很多问题。
如果您添加一个事件处理程序,addEventListener
那么它将获得一个事件对象作为第一个参数。
const buttons = document.querySelector(".btn-success"); for (let i = 0; i < buttons.length; i++) { buttons[i].addEventListener("click", changeStatus); }
考虑使用事件委托,而不是将事件处理程序分别绑定到每个按钮。
TA贡献1797条经验 获得超4个赞
你得到 undefined 因为你没有传递事件对象。改变:
onclick="changeStatus()"
到:
onclick="changeStatus(event)"
另请注意,使用内联处理程序不是一个好的做法。如果您关心良好做法,请不要使用内联事件处理程序。而是选择 javascript 中的元素并将点击事件侦听器附加到它:
const btns = document.querySelectorAll('.btn')
btns.forEach(btn => btn.addEventListener("click", e => {
let car = cars[btn.dataset.row];
console.log(car);
}));
TA贡献1946条经验 获得超4个赞
首先你必须传递一些东西来运行:
onclick="changeStatus(this)"
您的 THIS 此时表示“此元素”(此答案中的“此”太多了!)。
这意味着你没有 event.target,但是元素:
const changeStatus = (element) => {
let car = cars[element.dataset.row];
console.log(car);
}
工作代码:
https://jsfiddle.net/jmz37261/
顺便提一句。更好的选择是 addEventListener 而不是 onclick。
@编辑:
也许最好使用此解决方案(在这种特定情况下):
<button data-row="${i}" onclick="changeStatus(${i})" class="btn btn-sm btn-success">Summary</button>
进而:
const changeStatus = (row) => {
let car = cars[row];
console.log(car);
}
TA贡献1865条经验 获得超7个赞
问题出在您的按钮标签中:尝试替换onclick="changeStatus()"
为onclick="changeStatus"
e
您应该将函数的引用传递给按钮,这就是未设置事件(您的变量)的原因
添加回答
举报