Javascript 我们可以将所有事件注册到body吗?
因为我们知道所有事件都通过“体”,传播模型要么冒泡,要么捕获 所以,我们不应该将所有事件注册到body,然后检查目标元素以执行操作吗。因此,只有一个单击处理程序将检查所有单击,并根据目标元素执行操作 这将减少已注册事件的数量,就像所有单击事件一样,只有一个已注册的处理程序。Javascript 我们可以将所有事件注册到body吗?,javascript,jquery,events,event-handling,Javascript,Jquery,Events,Event Handling,因为我们知道所有事件都通过“体”,传播模型要么冒泡,要么捕获 所以,我们不应该将所有事件注册到body,然后检查目标元素以执行操作吗。因此,只有一个单击处理程序将检查所有单击,并根据目标元素执行操作 这将减少已注册事件的数量,就像所有单击事件一样,只有一个已注册的处理程序。 这种实现有什么问题吗?根据专家的评论,我认为拥有多个处理程序更好 但我们也可以有一个单独的处理程序 例如,假设我们想分别处理每个元素上的单击事件;我们只需使用一个处理程序即可实现此目标,如: <html> <
这种实现有什么问题吗?根据专家的评论,我认为拥有多个处理程序更好 但我们也可以有一个单独的处理程序 例如,假设我们想分别处理每个元素上的
单击事件;我们只需使用一个处理程序即可实现此目标,如:
<html>
<head>
<script type="text/javascript">
function ClickHandler(e){
e=window.event||null;
var x=e.target.id||null;
alert(x);
switch(x){
case 'refine': //refine Specific Code
break;
case 'html': // Other Stuff
break;
default: e.stopPropagation();
break;
}
}
</script>
</head>
<body OnClick="ClickHandler(event);" id="html">
<select id="refine">
<option class="default" value="0">Please refine...</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
<option value="red">Red</option>
</select>
</body>
</html>
函数ClickHandler(e){
e=窗口事件| |空;
var x=e.target.id | | null;
警报(x);
开关(x){
案例“优化”://优化特定代码
打破
案例'html'://其他内容
打破
默认值:e.stopPropagation();
打破
}
}
请改进。。。
绿色
蓝色
红色
在这里单击
元素将发出警报优化
,html
否则
--但是--
缺点:
这需要定义每个元素的ID
属性。
此外,我们无法在处理程序中注册特定于对象的事件,如
的OnSubmit
。
您必须在switch case
中维护大量代码,而这又是一项tedius工作。
这就是我们能做到的 代码的可读性变差了。!通常,更好的方法是捕获距离导致事件的DOM树部分更近的事件。这节省了对树的大量搜索。例外情况通常是DOM动态变化,在这种情况下,您将事件附加到第一个“不变”祖先。