javascript - 有没有办法优化“addEventListener”代码块?
问题描述
在 HTML 页面中,我有 7 个按钮,其 ID 如下:#I、#II、#III、#IV、#V、#VI、#VII放置在rContainer div 中。我想设置与触摸按钮相关的iActiveButton变量。我的代码似乎工作正常,但我觉得它可以增强和缩短。任何想法?
var iActiveButton;
function touchHandler(){
console.log(iActiveButton);
}
rContainer.addEventListener("touchstart", function(){
I.addEventListener("touchstart", function(){iActiveButton = 1;}, false);
II.addEventListener("touchstart", function(){iActiveButton = 2;}, false);
III.addEventListener("touchstart", function(){iActiveButton = 3;}, false);
IV.addEventListener("touchstart", function(){iActiveButton = 4;}, false);
V.addEventListener("touchstart", function(){iActiveButton = 5;}, false);
VI.addEventListener("touchstart", function(){iActiveButton = 6;}, false);
VII.addEventListener("touchstart", function(){iActiveButton = 7;}, false);
touchHandler();
}, false);
解决方案
解决此问题的一种方法是查看外部事件侦听器的事件目标。
rContainer.addEventListener("touchstart", function(event){
const targetId = event.target.getAttribute('id');
// don't set iActiveButton if you clicked empty space inside `rContainer`
if (targetId) {
// romanNumeralMap looks like { 'I': 1, 'II': 2, etc... }
iActiveButton = romanNumeralMap[targetId];
}
touchHandler();
}, false);
虽然这确实需要从罗马数字映射到常规数字,但这样您只需添加一个事件侦听器!
推荐阅读
- css - 在 Firefox for mobile 上单击图像输入时如何消除灰色突出显示?
- django - Django,在 url 中捕获并返回任意子路径
- dart - 如何使用通用主题更改 TextFormField 或 TextField 中输入文本的颜色?
- python - 如何将参数传递给 Azure 机器学习服务中的训练脚本?
- ios - 在 iOS 上,你可以向一个 SpriteKit 节点添加多个 CIFilter 吗?
- c++ - 使用 unordered_map 将一个类的实例映射到另一个类的实例
- javascript - 如何在 TypeScript 中实现 redux 中间件类
- bluetooth - 此蓝牙特征格式类型表中的“指数值”是什么?
- python - Python:for循环中的下一个
- spring - 如何为每个作业运行重置 MultiResourceItemReader。步骤范围不起作用