为<a>, which returns false from onclick event listener</a>的父级冒泡的事件

时间:2010-08-20 09:31:01

标签: jquery html javascript-events event-bubbling

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

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

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

$("a[href='#']").bind("click", function () { 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”上添加监听器功能(){alert(“It works!”);}?

3 个答案:

答案 0 :(得分:2)

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

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

这是working fiddle

答案 1 :(得分:1)

<a href="#" onclick="return false;">Some text</a>

你的jQuery绑定点击功能应该继续工作。

示例:

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

答案 2 :(得分:1)

为了阻止冒泡,我总是遵循这个:

$('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;
});