如何防止默认事件触发但仍允许事件冒泡

Posted

技术标签:

【中文标题】如何防止默认事件触发但仍允许事件冒泡【英文标题】:How to prevent default event firing but still allow event to bubble 【发布时间】:2011-10-08 09:44:20 【问题描述】:

使用 jQuery:使用以下代码,我想防止在单击时触发 href url(在本例中为哈希“#”),但仍允许单击事件继续在链上冒泡。请问如何实现?

<div>
    <a href="#">Test</a>
</div>

$('a').click(function(e)
    // stop a.click firing but allow click event to continue bubbling?
);

【问题讨论】:

【参考方案1】:
$('a').click(function(e)
    e.preventDefault();
    // stop a.click firing but allow click event to continue bubbling?
);

e.preventDefault() 不会阻止冒泡,e.stopPropagation()return false(同时停止)会。

【讨论】:

重点是需要冒泡,只是不要运行默认进程。 这正是e.preventDefault(); 会做的事情。我删除了额外的位,以便 OP 知道下次出现此类问题时。 @Shef 感谢 Shef 和其他所有人。我已经将 e.preventDefault() 与 'return false' 结合使用已有一段时间了,但以前从未使用过事件委托的好处,这就是出现此查询的原因。【参考方案2】:

你可以这样做:

$('a').click(function(e)
     e.preventDefault();
    // stop a.click firing but allow click event to continue bubbling?

);

在这里摆弄http://jsfiddle.net/tU53v/

【讨论】:

【参考方案3】:

试试这个..

$('a').click(function(e)
     e.preventDefault();
    // stop a.click firing but allow click event to continue bubbling?

);

here你可以找到return falsee.preventDefault();之间的区别

【讨论】:

以上是关于如何防止默认事件触发但仍允许事件冒泡的主要内容,如果未能解决你的问题,请参考以下文章

js阻止默认事件的方法

jquery阻止事件冒泡

js中啥是事件气泡,如何阻止事件气泡

jquery如何阻止事件冒泡

阻止默认事件和阻止冒泡的应用场景

事件侦听和删除事件——event对象——按钮精灵——默认事件——取消冒泡事件——事件委托——默认触发——onload 图片预加载四个迭代版本