javascript - 事件侦听器仅在第二次单击后正确触发
问题描述
我有一个事件监听器,它监听一组单选按钮的点击,然后将检查的值传递给一个函数。
I then output the checked value to the web console whenever a radio button is selected, but this only works if the radio button is clicked twice after page load.
var t1q1El = document.getElementById("t1q1");
function question_1() {
$(function(){
$("#t1q1").one('click',function(){
var t1q1UserInput = $("input[name=t1q1]:checked").val();
questionsData['question_1']['input'] = t1q1UserInput;
assessPoints('question_1', t1q1UserInput);
});
});
}
t1q1El.addEventListener("click", question_1);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<fieldset id="t1q1">
<label>Strongly Agree
<input type="radio" value="strongly-agree" name="t1q1">
</label>
<label>Agree
<input type="radio" value="agree" name="t1q1">
</label>
<label>No Stance
<input type="radio" value="no-stance" name="t1q1">
</label>
<label>Disagree
<input type="radio" value="disagree" name="t1q1">
</label>
</fieldset>
</form>
在第二次单击时,值会在单击后立即传递到 Web 控制台。所有连续点击都按预期运行。为什么第一次点击没有触发任何东西?
我还在学习 JS,所以请原谅/纠正任何不好的做法..
解决方案
这是发生的事情:
1)t1q1El.addEventListener("click", question_1);
您将功能分配给t1q1El
。基本上你是说点击question_1
时做t1q1El
。
2) 点击 1. 我们question_1
将点击事件分配给t1qE1
。现在 t1qE1 有 2 个事件。
3)单击 2. 执行question_1
(在自身上分配另一个单击事件)并执行该单击。
解决方案很简单,只需分配一个点击事件:
$(function(){
$("#t1q1").one('click',function(){
var t1q1UserInput = $("input[name=t1q1]:checked").val();
questionsData['question_1']['input'] = t1q1UserInput;
assessPoints('question_1', t1q1UserInput);
});
});
推荐阅读
- sql - 如何在不同的数据库中查找表列?
- r - 使用 mutate 和 case_when 在 dplyr 中通过双重条件重新编码变量
- sql - 使用每行计算值的 where 子句进行大规模更新?
- linux - 使用 sed 解析 nmap -oG 输出
- memory - Rust 线程之间的内存共享
- kotlin - is there a way to make a function to not return null when lookup from a map
- tensorflow2.0 - Tensorflow2.0 复用层
- c# - @onkeypress 没有得到文本输入框的更新值?
- java - Ehcache 2.10.6 命中统计未增加
- java - LanguageTool Java API 是否有“无用”的依赖关系?