停止jquery从挂钩所有的孩子

时间:2010-08-01 06:16:41

标签: javascript jquery events

我无法阻止愚蠢的事情在物品的孩子上空盘旋时触发事件。 我只希望通过div.item元素触发事件,而不是div.itemChild。这让我疯了,请帮助。

event.stopPropigation不起作用。 if(!$(event.source).is('itemChild'))由于某种原因is()也不会返回false。

HTML

<div id="items">
    <div class="item">
        <div class="itemChild">
        </div>
        <div class="itemChild">
        </div>
    </div>
</div>

JS

//on hover event for each post
$('div.item', '#items').live('mouseover mouseout', function(event){
    if (event.type == 'mouseover'){
        //fire mouseover handler
    }
    else{
        //fire mouseout handler
    }
});

有没有办法在徘徊div.item的孩子时停止射击?

顺便说一下div.item的孩子完全覆盖它。

基本上我希望它像.hover()一样运行,但绑定到通过ajax加载的东西。

1 个答案:

答案 0 :(得分:2)

这对孩子们没有约束力。它正在冒充父母。

另外,您的语法不正确。这样:

$("div.item", "div.items")...

说“找到我所有带有类别项目的div,这些div是带有项目类的div的后代。但是你没有这样的div(带有类项目)。你有一个带有项目ID的div。

结合所有这些尝试:

$("#items div").live("mouseover mouseout", function(event) {
  if ($(event.source).hasClass("itemChild")) {
    return false;
  } else if (event.type == "mouseover") {
    ...
  } else {
    ...
  }
});

或者,或者:

$("#items > div.item").live("mouseover mouseout", function(event) {
  if (!($this).is("div.item")) {
    return false;
  }
  ...
});

基本上,有很多方法可以给这只猫留下光彩,但就像我在第一句话中说的那样,你必须明白事件会直到处理程序停止传播,直接(通过调用event.stopPropagation()或返回{ {1}}来自事件处理程序,相当于false)。

此外,如果您正在执行event.stopPropagation(); event.preventDefault();mouseenter,您可以使用同时执行这两项操作的mouseout事件:

hover()