html a标签禁止跳转页面跳转,为什么阻止了div的默认行为,里面的a标签就不跳转网站了?...

首先,不要不看手册瞎猜,况且事件根本没有继承一说。

看到这个问题,的确也打破了我之前对事件机制的认识。首先我们知道事件机制分为捕获阶段和冒泡阶段,捕获阶段事件从window一直传播到元素本身,然后开始冒泡阶段,冒泡阶段事件再从元素本身传播到window。下面我们看手册是怎么说的(https://developer.mozilla.org...:

bVbhLpb?w=1358&h=858

e.preventDefault() 可以在任何阶段阻止事件,并且该方法不会阻止该事件的进一步冒泡。在该例中,a 本身的 click 事件是被触发了的,但当该事件冒泡到递到 div 时,div调用 e.preventDefault() 方法, 该方法将 e.defaultPrevented 修改为 true, 这样当时间传递到 window 时 e.defaultPrevented === true,默认操作不执行。为了验证,这里写段代码验证一下:

var div = document.getElementsByTagName("div")[0];

var a = document.getElementsByTagName("a")[0];

a.onclick = () => {

console.log('click A');

};

div.onclick = (e) => {

console.log('click DIV');

e.preventDefault();

};

window.onclick = (e) => {

console.log('window', e.defaultPrevented);

};

理解这个问题,重要是理解事件周期,你定义了两个事件,其实是一个事件在其传播周期内的两个不同阶段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值