时间:2021-05-25
我最近调netsurf也遇到一个相关的bug : alert() 被调了两次。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");
Button1.onclick = causealert;
</script>
</body>
</html>
通过gdb, 定位到是_dom_node_dispatch_event()里面的问题:
复制代码 代码如下:
for (targetnr = ntargets; targetnr > 0; --targetnr)...
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).
规范规定capturing 和bubbling 只能选其一, 代码中在 js_dom_event_add_listener()是选capturing。因此就解释了为什么alert 被执行两回了。
修改: 根据DOM 3 规范,把上面的0改成1就行了。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Flow是Facebook出品的,针对JavaScript的静态类型检查工具。其代码托管在github之上,并遵守BSD开源协议。关于Flow它可以帮助我们捕获
javascript获取event先从一个简单的例子说起,一个简单的button控件如下:然后为其注册事件,这样的情况,怎么在javascript里获取even
没有event就没有脚本。可以看看任何有JavaScript代码的网页:几乎所有的例子都有一个事件触发了脚本。原因非常简单。JavaScript就是给你的页面添
第一页:JavaScript数据类型详解第二页:JavaScript数据类型详解第三页:JavaScript数据类型详解 数据类型 JavaScript中有
介绍之前先介绍jQuery的一个方法jQuery.event.fix(event||window.event);此方法个浏览器的event对象转换为jQuery