我们可以将所有事件注册到正文吗?



由于我们知道所有事件都通过"body",因此传播模型要么冒泡,要么捕获。

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

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

根据专家的评论,我认为Having several handlers is better.

但是我们也可以有一个处理程序。

例如,假设我们要分别处理每个元素上的Click事件;我们可以通过仅使用一个处理程序来实现它,例如:

<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>

在这里单击<select>元素将提醒refine,否则html

--但--

缺点:

  • 这要求每个元素都定义其ID属性。
  • 此外,我们无法在处理程序中注册特定于对象的事件,例如<form> OnSubmit
  • 您必须在switch-case中维护大量代码,这反过来又是一项乏味的工作。
  • 这就是我们实现它的方式!

    最新更新