js事件

fuyou001 2010-01-24 05:19:16

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="test.js"></script>

</head>
<body>
<script type="text/javascript">
function addEventSimple(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);//冒泡
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
function test(){
alert('sese');
return false;
}
//addEventSimple(document,'click',test);
document.onclick = test;
</script>
<a href ='http://www.sina.com'>sina </a>
</body>

</html>

上面这段代码

当用传统事件注册事件时,你点击超链接是不会访问到sina的!我分析的原因是

当你点击超链接时,document捕获了onclick 事件 就触发了test 函数,因为函数返回false 所以a的默认行为被阻止 了
因此不能访问sina
但这也有一个疑问,test函数仅仅取消浏览器对a 的默认行为,但click事件还会继续传播,最后还是会到元素a,点击事件还是会传播到a,为什么a会没反应呢

2 :当我用w3c 事件模型时,也就是把document.onclick = test;注释掉,//addEventSimple(document,'click',test);注释取消

不管理我在obj.addEventListener(evt,fn,false);//冒泡
把第三个参数改成true or false 时,事件还是会传播到a,能访问到sina

这是为什么

如果按照我1分析的结论,当冒泡时,就应该不能访问sina 才对



大家帮忙分析下 谢谢!
...全文
71 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fuyou001 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 danica7773 的回复:]
我试了一下,感觉像是FF用return false没有达到预期的效果;

所以我改了一下test

JScript code
function test(){
alert("ss");

var e = window.event || arguments[0];
if(e.preventDefault) return e.preventDefault();
else return e.returnValue=false;
/*return false*/


在IE和FF中就一样了.

测试用的IE6和FF3.5
[/Quote]
我用firefox 测试下,就是我上面的说的效果
版本是3.6
friendly_ 2010-01-24
  • 打赏
  • 举报
回复
function test(e){
alert('sese');
if (e.preventDefault )
e.preventDefault();
else
return false;
}
打字员 2010-01-24
  • 打赏
  • 举报
回复
我试了一下,感觉像是FF用return false没有达到预期的效果;

所以我改了一下test


function test(){
alert("ss");

var e = window.event || arguments[0];
if(e.preventDefault) return e.preventDefault();
else return e.returnValue=false;
/*return false*/


在IE和FF中就一样了.

测试用的IE6和FF3.5
kksss 2010-01-24
  • 打赏
  • 举报
回复
obj.addEventListener(evt,fn,false);//冒泡

这个不是冒泡
addEventListener是事件监听

第3个参数IE 中没有
FF中为事件的响应顺序
如果LZ想测试就把触发标签的TAGNAME OR ID ALERT出来看下

(PS:我没测试过)
fuyou001 2010-01-24
  • 打赏
  • 举报
回复
没人遇到类似的问题吗
fuyou001 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happy664618843 的回复:]
function addEventSimple(obj,evt,fn) {
        if (obj.addEventListener)
            obj.addEventListener(evt,fn,false);//冒泡
    else if (obj.attachEvent)
            obj.attachEvent('on'+evt,fn);
    }
不是冒泡吧 这个是在fireFox 中注册事件
下面个是在ie中注册事件
[/Quote]
false 是冒泡 true 是捕获 这不是w3c的事件模型吗!!
happy664618843 2010-01-24
  • 打赏
  • 举报
回复
function addEventSimple(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);//冒泡
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
不是冒泡吧 这个是在fireFox 中注册事件
下面个是在ie中注册事件
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2010-01-24 05:19
社区公告
暂无公告