我无法阻止愚蠢的事情在物品的孩子上空盘旋时触发事件。
我只希望通过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加载的东西。
答案 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()