javascript - 重新加载 KeyDown & Click 事件后,仅在第二次单击后才有效
问题描述
加载/重新加载页面后,KeyDown
和Click
上的事件ON/OFF button
仅在按两次后才起作用,而不是按预期一次。
这只是在加载/重新加载后第一次发生。该行为是之后的预期行为。
我试过window.onload
不成功。
这是相关的JS:
//Button POWER
//event listeners
buttonEl.addEventListener("click", turnOn);
window.addEventListener("keydown", checkEnterKey);
//Storing values
var greenButton = function() {
buttonEl.style.backgroundColor = "rgba(0, 103, 73, 0.4)";
buttonEl.style.color = "white";
buttonEl.textContent = "ON";
}
var whiteButton = function() {
buttonEl.style.backgroundColor = "rgba(255, 255, 255, 0.7)"
buttonEl.style.color = "rgb(40, 84, 45)";
buttonEl.textContent = "OFF";
};
//function called on event
function turnOn(e) {
if (buttonEl.textContent == "OFF") {
greenButton();
for (i = 0; i < keyEl.length; i++) {
keyEl[i].style.backgroundColor = "rgba(0, 103, 73, 0.4)";
pEl[i].style.color = "white";
}
} else {
whiteButton();
for (i = 0; i < keyEl.length; i++) {
keyEl[i].style.backgroundColor = "rgba(255, 255, 255, 0.7)";
pEl[i].style.color = "#2d5b3c";
}
}
}
function checkEnterKey(e) {
if (e.keyCode == 13) {
turnOn();
}
}
整页演示:
解决方案
原因是您确定按钮 ( buttonEl.textContent == "OFF"
) 状态的方法不是很安全。特别是,按钮textContent
最初在“OFF”文本的任一侧包含一些空格,第一次测试失败。之后,文本被设置为“OFF”,没有空格,测试从此成功。
要快速修复,请更改buttonEl.textContent
为buttonEl.textContent.trim()
. 但是,我建议使用适当的布尔变量来跟踪不依赖字符串比较的开/关状态。
推荐阅读
- sql - 如何在 oracle 中以分钟间隔生成日期范围的系列?
- excel - 选择一个单元格会覆盖另一个单元格中的文本
- python - 试图从 python 向谷歌电子表格添加行。无法计算数据参数的长度。指定 Content-Length 的值
- vhdl - 带有 BlockRAM 的移位寄存器 - XILINX
- sql - PostGIS st_transform 函数支持哪些 STID
- python - 如何将目录中文件数量的内容添加到相同数量的列表中
- javascript - Angular 库中提供的 HttpInterceptor 不适用于 Angular 应用程序
- salesforce - SOQL 中的内连接与关系
- excel - 基于单元格值的 VBA 选择
- python - 如何为不同的调度器开始时间设计 dag