Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我们可以将所有事件注册到body吗?_Javascript_Jquery_Events_Event Handling - Fatal编程技术网

Javascript 我们可以将所有事件注册到body吗?

Javascript 我们可以将所有事件注册到body吗?,javascript,jquery,events,event-handling,Javascript,Jquery,Events,Event Handling,因为我们知道所有事件都通过“体”,传播模型要么冒泡,要么捕获 所以,我们不应该将所有事件注册到body,然后检查目标元素以执行操作吗。因此,只有一个单击处理程序将检查所有单击,并根据目标元素执行操作 这将减少已注册事件的数量,就像所有单击事件一样,只有一个已注册的处理程序。 这种实现有什么问题吗?根据专家的评论,我认为拥有多个处理程序更好 但我们也可以有一个单独的处理程序 例如,假设我们想分别处理每个元素上的单击事件;我们只需使用一个处理程序即可实现此目标,如: <html> <

因为我们知道所有事件都通过“体”,传播模型要么冒泡,要么捕获

所以,我们不应该将所有事件注册到body,然后检查目标元素以执行操作吗。因此,只有一个单击处理程序将检查所有单击,并根据目标元素执行操作

这将减少已注册事件的数量,就像所有单击事件一样,只有一个已注册的处理程序。
这种实现有什么问题吗?

根据专家的评论,我认为拥有多个处理程序更好

但我们也可以有一个单独的处理程序

例如,假设我们想分别处理每个元素上的
单击
事件;我们只需使用一个处理程序即可实现此目标,如:

<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动态变化,在这种情况下,您将事件附加到第一个“不变”祖先。