2 回答
![?](http://img1.sycdn.imooc.com/54584f3100019e9702200220-100-100.jpg)
TA贡献1851条经验 获得超4个赞
解决此问题的一种方法是查看外部事件侦听器的事件目标。
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);
虽然这确实需要从罗马数字映射到常规数字,但这样您只需添加一个事件侦听器!
![?](http://img1.sycdn.imooc.com/5458477f0001cabd02200220-100-100.jpg)
TA贡献1824条经验 获得超5个赞
如果你真的想保持这样的代码逻辑并且只想重构,我会这样做:
const buttonArray = [I, II, III, IV, V, VI, VII];
rContainer.addEventListener("touchstart", function(){
buttonArray.forEach((button, index) => {
button.addEventListener("touchstart", function(){iActiveButton = index;}, false);
}
touchHandler();
}, false);
但我完全同意这些评论,在每个事件上添加新的 EventListeners 似乎很奇怪。
添加回答
举报