最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于javascript event flow 的一個bug詳解

 更新時間:2013年09月17日 15:22:44   作者:  
描述了firefox,safari 有一個bug和DOM 3 規(guī)范不一致:在event.currentTarget等于event.target的時候(即event flow處于target phase時),會調(diào)用添加到currentTarget上的useCapture為true的listener

我最近調(diào)netsurf也遇到一個相關(guān)的bug : alert() 被調(diào)了兩次。html 代碼:

復制代碼 代碼如下:

<html>
<head>
<title>alert onclick example</title>

<script type="text/javascript">

function causealert()
{
var txt = document.getElementById("p1").textContent;
alert(txt);
}

</script>
</head>

<body>
<div style="border: 1px solid red">
<p id="p1">First line of paragraph.<br /></p>
</div><br />

<button id="button1" >add another textNode.</button>

<script>
var Button1 = document.getElementById("button1");
/*var Button1Click = function() { alert(1); };   
Button1.addEventListener("click", Button1Click, false);*/
Button1.onclick = causealert;

</script>

</body>
</html>


     通過gdb, 定位到是_dom_node_dispatch_event()里面的問題:
復制代碼 代碼如下:

   /* The capture phase */ for (targetnr = ntargets; targetnr > 0; --targetnr)...

/* Bubbling phase */
 evt->phase = DOM_BUBBLING_PHASE;

 for (targetnr = 0; targetnr < ntargets; ++targetnr)


 

事件流是這樣的: p1(root)-->p2-->... --> pm --> T  (capturing phase), T (target phase), T--> pm --> ... --> p1 (bubbling phase).

規(guī)范規(guī)定capturing 和bubbling 只能選其一, 代碼中在 js_dom_event_add_listener()是選capturing。因此就解釋了為什么alert 被執(zhí)行兩回了。

修改: 根據(jù)DOM 3 規(guī)范,把上面的0改成1就行了。

相關(guān)文章

最新評論

宜丰县| 遂平县| 唐河县| 庆元县| 宣恩县| 沭阳县| 荆门市| 乐陵市| 分宜县| 巴林左旗| 德兴市| 汝州市| 崇义县| 肥乡县| 永寿县| 平湖市| 大洼县| 蓬安县| 延寿县| 海兴县| 米易县| 昌图县| 松潘县| 廊坊市| 巴中市| 霍林郭勒市| 胶南市| 洞头县| 余庆县| 桐乡市| 永登县| 娄底市| 高碑店市| 乳源| 淳安县| 凤山县| 五常市| 岳西县| 会泽县| 诸暨市| 辉县市|