如何使用DOM事件流动捕获

yonglin4605 2010-01-13 02:19:20
DOM中有2种事件流,一个是冒泡事件,还有一个是捕获事件

我现在有拦截所有的<a>链接</a>事件,使得所有的<a>超链接失效,
使用捕获事件应该可以做到吧,
具体用Javascript怎么才能捕获的<a>标签的点击事件,并使之失效啊??
...全文
110 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kksss 2010-01-13
  • 打赏
  • 举报
回复
IE下面应该是这个 window.attachEvent(sEvent, fpNotify)
yonglin4605 2010-01-13
  • 打赏
  • 举报
回复
自己找到方法了

window.addEventListener('click',function(event){
var url=event.target.href;
if(url.indexOf('http://')==0){
alert(url);
event.preventDefault();
event.stopPropagation();

}
},true);

其中第三个参数为true,表示在事件捕获阶段执行,如果为false,则在冒泡阶段执行
因为IE不支持事件捕获,所以IE无法使用。
不得不说IE很挫,W3C DOM2的事件规范又不支持
一弗楚 2010-01-13
  • 打赏
  • 举报
回复
LZ要的应该是取消默认动作而不是阻止冒泡吧
<html>
<head>
<title> </title>
<script>
function stopPropagation(eventObj)
{
if(eventObj.stopPropagation)
{
eventObj.stopPropagation();
}
else
{
eventObj.cancelBubble=true;
}
}
//取消默认动作
function preventDefault(eventObj)
{
if(eventObj.preventDefault)
{
eventObj.preventDefault();
}
else
{
eventObj.returnValue=false;
}
}
window.onload=function(){
var as=document.getElementsByTagName("a");
for(var i=0;i<as.length;i++)
{
if(window.event)
as[i].onclick=function(){preventDefault(window.event)};
else
as[i].onclick=function(){preventDefault(arguments[0])};
}
}
</script>
</head>
<body>
<a href="http://www.baidu.com">百度</a><br/>
<a href="http://www.google.com">谷歌</a>
</body>
<html>
kksss 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yonglin4605 的回复:]
JScript codevar as=document.getElementsByTagName("a");
不要这种遍历的方法,当我动态添加 <a>标签的时候就无效了,

使超链接点击事件失效只是举个例子,我要的就是捕获事件流的js操作,最好是兼容浏览器的。
[/Quote]

动态添加么就添加好再执行次循环,
你要捕获事件那就到触发事件的函数中去处理。
没有触发哪来事件
一弗楚 2010-01-13
  • 打赏
  • 举报
回复

function stopPropagation(eventObj)
{
if(eventObj.stopPropagation)
{
eventObj.stopPropagation();
}
else
{
eventObj.cancelBubble=true;
}
}
yonglin4605 2010-01-13
  • 打赏
  • 举报
回复
var as=document.getElementsByTagName("a");

不要这种遍历的方法,当我动态添加<a>标签的时候就无效了,

使超链接点击事件失效只是举个例子,我要的就是捕获事件流的js操作,最好是兼容浏览器的。
一弗楚 2010-01-13
  • 打赏
  • 举报
回复
用不着阻止冒泡呀

<html>
<head>
<title> </title>
<script>
window.onload=function(){
var as=document.getElementsByTagName("a");
for(var i=0;i<as.length;i++)
{
as[i].onclick=function(){return false;};
}
}
</script>
</head>
<body>
<a href="http://www.baidu.com">百度</a><br/>
<a href="http://www.google.com">谷歌</a>
</body>
<html>
antony1029 2010-01-13
  • 打赏
  • 举报
回复
这个可以阻止冒泡。

function stopBubble(e)
//非ie的
if(e&& e.stopPropagation)
e.stopProgpagation();
else
window.event.cancelBubble=true;

你说的点击事件失效,是要去掉浏览器的默认行为。

function stopDefault(e)
{
if(e&& e.preventDefault)
e.preventDefault();
else
window.event.returnValue=false;
return false;
}
kksss 2010-01-13
  • 打赏
  • 举报
回复
var a = document.getElementsByTagName('a');
for(var i = 0;i < a.length; i++){
a[i].onclick = function (){return false;}
}

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧