javascript - 如何从不同的按钮多次调用一个函数?
问题描述
我正在使用 javascript 构建一个测验页面,并希望用户从多项选择中进行选择,然后点击“开始”来检查他们的答案。这是第一个问题的html:
<p class="question">What is the name of Joey's bedtime penguin pal?</p>
<div class="radio">
<div>
<input type="radio" class="wrong" name="q1">Maurice
</div>
<div>
<input type="radio" class="wrong" name="q1">Clunkers
</div>
<div>
<input type="radio" class="right" name="q1">Hugsy
</div>
<div class="button">
<button type="button" class="go">Go</button>
</div>
<div>
<img src="images/hugsy.jpg" class="image" style="display: none;"
</div>
我创建了一个由 Go 按钮调用的函数,它会通知用户他们是否正确。这是javascript:
let go = document.querySelector('.go');
let correct = document.querySelector('.right');
let showPic = document.querySelector('img');
let remGo = document.querySelector('button');
let choices = document.querySelector('.radio');
let score = 0;
go.addEventListener('click', checkAnswer);
function checkAnswer() {
if (correct.checked) {
showPic.classList.remove('image');
remGo.remove();
choices.innerHTML = '<h2 style="color: green;">Correct!</h2>';
score++;
} else {
remGo.remove();
choices.innerHTML = '<h2 style="color: red;">Incorrect</h2>';
}
}
此代码按我想要的方式工作,但仅适用于第一个问题。当我尝试通过单击问题 2 上的“开始”再次调用该函数时,没有任何反应。
有没有办法使用不同的按钮多次调用一个函数?
解决方案
document.querySelector('.go');
只选择第一个匹配元素。
.go
要选择您需要使用的类的所有元素querySelectorAll
然后,您需要将事件侦听器分配给返回的所有元素。
这是一个最小的例子:
let buttons = document.querySelectorAll('.go');
for (const button of buttons) {
button.addEventListener('click', checkAnswer);
}
function checkAnswer() {
console.log("checkingAnswer...")
}
<div class="button">
<button type="button" class="go">Go</button>
</div>
<div class="button">
<button type="button" class="go">Go</button>
</div>
<div class="button">
<button type="button" class="go">Go</button>
</div>
推荐阅读
- javascript - Markdown“目录”在角度 8 中不起作用
- python - Django - 计算年龄直到数据库中的某个日期
- c++ - “Cpr”C++ 请求库返回内部错误
- python - 为什么 df.loc[0][0] 在 python pandas 中给出第一秒而不是第一秒
- firebase - 如何将 GCP KMS 与 Firebase 和 Firebase Cloud Functions 一起使用
- r - 如何模拟 Polya urn (Martingale) 之类的问题?
- c++ - 编译器可以轻松地优化调用站点的额外条件检查吗?
- angular - 如何知道角度路由器是否已注册路由
- java - JavaFX BarChart 显示 X 轴上元素的图像
- python - 如何解决导入错误:pycurl lib. 在基于 Debian 的系统上安装它: $ 'sudo apt-get install python3-pycurl'