Javascript 多事件侦听器
好的,我有以下问题: 我是否应该将事件侦听器直接添加到Javascript 多事件侦听器,javascript,click,listener,display,Javascript,Click,Listener,Display,好的,我有以下问题: 我是否应该将事件侦听器直接添加到父元素(模式弹出框),其中该元素有3个按钮(2个用于关闭选项卡,1个用于提交数据) 在侦听器函数中分配一些类方法,例如,并操作整个功能(提交数据和显示UI): 或者我应该向父元素添加2个单击侦听器,一个用于关闭模态,另一个用于提交数据 document.getElementById('weather-modal-container').addEventListener('click', closeModal); document.getEle
父元素(模式弹出框),其中该元素有3个按钮(2个用于关闭选项卡,1个用于提交数据)
在侦听器函数中
分配一些类方法
,例如,并操作整个功能(提交数据和显示UI):
或者我应该向父元素添加2个单击侦听器,一个用于关闭模态,另一个用于提交数据
document.getElementById('weather-modal-container').addEventListener('click', closeModal);
document.getElementById('weather-modal-container').addEventListener('click', submitData);
或者一个监听器直接连接到父元素
来操作UI
,另一个监听器则连接到容器中的按钮
document.getElementById('weather-modal-container').addEventListener('click', closeModal);
document.getElementById('button-inside-container').addEventListener('click', submitData);
如果将2个click事件处理程序绑定到父元素,则只会触发最后一个,这意味着您需要在函数定义中对实际单击的内容进行额外检查
i、 e
因此,根据您实际需要的复杂性,将事件处理程序函数绑定到特定元素可能不会太麻烦,好的,那么只为所有元素绑定一个事件侦听器怎么样
const MyDialog=document.querySelector(“#天气模式容器”)
MyDialog.onclick=e=>{
让role=e.target.dataset.role
如果(角色)
{
e、 预防默认值()
控制台清除()
console.log(角色)
交换机(角色){
案例“提交数据”:
console.log('something is:',MyDialog.something.value)
//关于提交数据的东西
打破
案例“closeModal”:
//关于关闭模式的东西
打破
}
}
}
#天气模式容器{显示:块;宽度:30em;填充:1em;边框:1px纯灰;}
[数据角色]{color:red;float:right;}
#天气模式容器按钮{float:右侧;边距:0.3em0}
呜呜呜呜呜呜
发送
取消
请对每个问题问一个问题……因此数据-
属性比使用e.target.className/id==something{do something}
更好;没有绝对的真理,在任何情况下,计算机科学都不是一种宗教。最好的代码是最容易理解、尽可能简洁的代码。对我来说,增加事件处理程序是一种异端邪说,尤其是在这种情况下,因为HTML5.2版本将很快引入标记Ok先生,您的示例是一种好的、可以理解的方法。我会用那个箱子。比为关闭按钮设置一个类
,为提交按钮设置一个id
更容易
document.getElementById('weather-modal-container').addEventListener('click', closeModal);
document.getElementById('button-inside-container').addEventListener('click', submitData);
if(event.target.id == 'button-inside-container') {
// do something
}