<!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 才对大家帮忙分析下 谢谢!
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);//冒泡
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
不是冒泡吧 这个是在fireFox 中注册事件
下面个是在ie中注册事件
addEventListener是事件监听第3个参数IE 中没有
FF中为事件的响应顺序
如果LZ想测试就把触发标签的TAGNAME OR ID ALERT出来看下(PS:我没测试过)
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
alert('sese');
if (e.preventDefault )
e.preventDefault();
else
return false;
}
版本是3.6