2 回答

TA貢獻1813條經驗 獲得超2個贊
你需要這樣做:
individualAnswer.addEventListener("click", function() {
checkForAnswer(i, allAnswersFlattened));
});
但隨后您會遇到不正確的問題i(因為單擊它時,該i值已增加。
所以也許你應該這樣做:
individualAnswer.addEventListener("click", ((i) => function() {
checkForAnswer(i, allAnswersFlattened));
})(i));
或者
individualAnswer.addEventListener("click", checkForAnswer.bind(this, i, allAnswersFlattened));
或者有checkForAnswer返回一個函數:
function checkForAnswer(i, allAnswers) => () => {
// whatever the code was before
}

TA貢獻1884條經驗 獲得超4個贊
您的事件正在觸發,因為您在此處調用了該函數:
individualAnswer.addEventListener("click", checkForAnswer(i, allAnswersFlattened));
checkForAnswer(i, allAnswersFlattened) - 執行函數,而不是將其作為參數傳遞給 addEventListener
您需要做的是創建一個事件處理程序,從中調用“checkForAnswer”(請參見下面的 myEventListener):
answerContainer.innerHTML = '';
for (let i = 0; i < allAnswersFlattened.length; i++) {
var myEventListener = function(e) {
checkForAnswer(i, allAnswersFlattened)
};
let individualAnswer = document.createElement('div');
individualAnswer.className = 'answer';
let answerText = document.createTextNode(allAnswersFlattened[i]);
individualAnswer.appendChild(answerText);
individualAnswer.addEventListener("click", myEventListener );
answerContainer.appendChild(individualAnswer);
}
添加回答
舉報