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 此時表示“此元素”(此答案中的“此”太多了?。?/p>
這意味著你沒有 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
您應該將函數的引用傳遞給按鈕,這就是未設置事件(您的變量)的原因
添加回答
舉報