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

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

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

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

復(fù)制代碼 代碼如下:

<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()里面的問題:
復(fù)制代碼 代碼如下:

   /* 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)文章

最新評(píng)論

宝山区| 文昌市| 文登市| 柳林县| 盐亭县| 通河县| 墨玉县| 迭部县| 淄博市| 台北市| 博爱县| 玉门市| 蛟河市| 岳阳县| 收藏| 连城县| 浪卡子县| 建湖县| 宁陵县| 苍梧县| 漳浦县| 湖南省| 南郑县| 沽源县| 蚌埠市| 遂川县| 榆林市| 荆门市| 潼南县| 富源县| 贵州省| 达州市| 灵川县| 香河县| 若羌县| 延庆县| 清水县| 高台县| 罗源县| 南宫市| 大荔县|