<a> 的父级事件冒泡,从 onclick 事件侦听器返回 false

Posted

技术标签:

【中文标题】<a> 的父级事件冒泡,从 onclick 事件侦听器返回 false【英文标题】:Event bubbling for parent of <a>, which returns false from onclick event listener 【发布时间】:2011-04-01 13:48:55 【问题描述】:

我尝试为以下任务制定一个通用解决方案:onclick 元素的事件侦听器

<a href="#">Some text</a>

必须返回 false。点击后可以停止页面滚动。

$("a[href='#']").bind("click", function ()  return false; );  

它可以停止滚动,但return false 也停止冒泡!所以,如果我有以下代码:

html

<div class="clickable">
   <a href="#">Text</a>
</div>

javascript (JQuery)

$("a[href='#']").bind("click", function ()  return false; );
$(".clickable").bind("click", function()alert("It works!");)

如果我点击“文本”,则没有警报。

我可以恢复冒泡吗?或者,可能还有其他常见的方法可以从每个此类“a”标签的onclick 事件侦听器返回 false?或者唯一的方法是在“a”上添加监听器function()alert("It works!");

【问题讨论】:

【参考方案1】:

更改click 函数的签名以接受事件参数并使用preventDefault

$("a[href='#']").bind("click", function (e)  e.preventDefault(); );
$(".clickable").bind("click", function()alert("It works!");)

这是working fiddle。

【讨论】:

【参考方案2】:
<a href="#" onclick="return false;">Some text</a>

您的 jQuery 绑定点击函数应该可以继续工作。

例子:

http://jsfiddle.net/mU2dq/1/

【讨论】:

【参考方案3】:

为了阻止某些东西冒泡,我总是遵循这个:

$('myAnchor').live("click", function(e) 
    e.preventDefault();
    e.stopPropagation();

    //or if you want to stop all handlers
    e.stopImmediatePropagation();

    //code here

    //for IE etc.
    return false;
);

【讨论】:

他不想阻止某些东西冒泡,他想允许冒泡。 停止传播会阻止它冒泡 @GenericTypeTea - 啊,我误解了“停止冒泡”

以上是关于<a> 的父级事件冒泡,从 onclick 事件侦听器返回 false的主要内容,如果未能解决你的问题,请参考以下文章

事件捕获和事件冒泡

DOM 事件冒泡

js节点,阻止事件冒泡

js节点,阻止事件冒泡

js事件冒泡与捕捉解析

事件冒泡 & 阻止事件冒泡