javascript - 加载 DOM 时触发 JS 事件
问题描述
我正在设计一个有趣的测验应用程序。测验将显示一个问题,有四个选项可供回答。我正在使用 vanilla JS 来更新 DOM,并且需要为每个呈现的答案添加一个 eventListener。出于某种原因,一旦 DOM 被渲染,eventListener 就会被触发。关于为什么的任何想法?
//add each answer to the answerContainer
answerContainer.innerHTML = '';
for (let i = 0; i < allAnswersFlattened.length; i++) {
let individualAnswer = document.createElement('div');
individualAnswer.className = 'answer';
let answerText = document.createTextNode(allAnswersFlattened[i]);
individualAnswer.appendChild(answerText);
individualAnswer.addEventListener("click", checkForAnswer(i, allAnswersFlattened));
answerContainer.appendChild(individualAnswer);
}
解决方案
你需要这样做:
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
}
推荐阅读
- html - 模式背景下显示的引导模式对话框
- reactjs - React-csv 没有正确分离数据
- xml - 如何在元素树中修复此 ElementTree.py(1320)XML()
- java - 大家好,我使用 Lottie 动画创建了一个启动画面,我的问题是动画完成后,我如何更改活动?
- angular - 向外部 api 调用发出发布请求时如何以角度修复跨域请求块
- c# - 等待 API 响应时加载页面
- python-3.x - 如何在 hsv 颜色空间中找到红色和黄色颜色的上限和下限?
- c# - MahApps 图标包
- node.js - 使用 express [NODEJS] 发送和接收图像缓冲区
- c# - 光标在代码编辑器中的 Visual Studio 2019 中损坏