Javascript事件流的bug详细解释

我最近转移到相关的错误:netsurf警报()两times.html代码:

复制代码代码如下所示:


警惕onclick的例子



causealert()函数
{
VaR txt = document.getelementbyid(P1TextContent);
警报(TXT);
}






段落的第一行。


添加另一个文本节点。


VaR Button1 = document.getelementbyid(Button1);
/ * VAR实现旋转字体=功能(){ alert(1);};
button1.addeventlistener(点击,实现旋转字体,假);。
causealert button1.onclick =;






通过GDB,问题是位于_dom_node_dispatch_event()。
复制代码代码如下所示:
捕获阶段 / * * / /(targetnr = ntargets;targetnr > 0;——targetnr)…

冒泡阶段
EVT ->相= dom_bubbling_phase;

对于(targetnr = 0;targetnr < ntargets;+ + targetnr)



事件的流程如下:P1(根)- > P2 - PM T(捕获…/阶段),T(目标阶段),T - pm(冒泡阶段…)。

规范规定,捕获和冒泡只能选择其中的一个,在js_dom_event_add_listener代码()是捕获的选择。所以,这就解释了为什么警报已执行的两倍。

修改:根据DOM 3规范,上述0将改为1。