我正在尝试使用原生JS进行事件委托。我的容器里有一个按钮,就像这样:
<div id="quiz">
<button id="game-again" class="game-again">
<span class="icon-spinner icon"></span>
<span>Go again</span>
</button>
</div>
按照David Walsh的详细说明,我正在向按钮的祖先元素添加事件处理程序,如下所示:
this.container.addEventListener('click', function(e){
if (e.target && e.target.id == 'game-again') {
e.stopPropagation();
self.publish('primo:evento');
}
});
当 this.container
是 #quiz 元素时,这段代码有效。但是有一半的时间点击事件的目标是按钮内的一个 span 元素,所以我的事件处理程序不会被调用。怎样才能解决这种情况呢?
matches.call(e.target,"#game-again,#game-again *")
,那么您就可以使用.matches
了 - 有关更多详细信息,请参见我的答案。 - Benjamin Gruenbaum<button data-action="tasks.remove">X</button>
。并且您可以从data-action-params
HTML5 数据属性中传递自定义数据给每个操作处理程序。 - Greg Burghardt