stopPropagation不使用嵌套的href标记

时间:2013-07-14 20:26:08

标签: javascript jquery html

我有多个div如下所示:

<div class="msg-list clearfix" id="27705">
  <div class="thumbnail_image">
    <a href="some_path">AnchorText</a>
  </div>
  <div class="msg-date">DATA</div>
</div>

我试图抓住父div的点击事件,但是当点击href元素时,我的点击事件也会被触发,而不是仅仅点击链接点击。

这是我的jquery电话:

//$(".msg-list a").click(function(e) {
$(".msg-list").click(function(e) {

    e.stopPropagation(); 
    alert("Handler for .click() called.");
});

知道我缺少什么吗?

4 个答案:

答案 0 :(得分:1)

尝试:

$(".msg-list").on('click', function(e) {
    alert("div handler");
    return false;
});
$(".msg-list a").on('click', function(e) {
    alert("a handler");
    e.stopPropagation();
});
这是你想要的吗? http://jsfiddle.net/L5kC4/2

答案 1 :(得分:0)

click事件与任何其他事件一样,使用Bubbling(http://en.wikipedia.org/wiki/DOM_events)调度到元素,因此点击的任何内部元素都将触发所有父元素(另一种方式称为隧道)。

你必须将stopPropagation放在锚元素onclick事件上或放入元素:

onclick="return false;"

答案 2 :(得分:0)

要启用div中的链接,请使用此JavaScript。您必须在包含的元素即链接上禁用传播!

$(".msg-list a").click(function(e) {
    e.stopPropagation();
});
$(".msg-list").on('click', function(e) {
    alert("Handler for .click() called.");
});

答案 3 :(得分:0)

老问题。但是,我有同样的问题。

添加def countInversions(arr): count = 0 n = len(arr) for i in range(n): _count = count for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: count += 1 arr[j], arr[j + 1] = arr[j + 1], arr[j] if _count == count: break return count 解决了该问题。默认为跟随链接。因此,防止它跟随。

此外,将其添加到其子级e.preventDefault()中也没有问题。