我有一个span
,其中包含一个锚点和一个span
。以下示例
<span id="x"><a id="a_in" href="">link</a><span id="x_in">x</span></span>
现在我在mousenter
上附加了mouseleave
/ span
个事件id="x"
。当我将鼠标悬停在span id="x"
上时,会触发mousenter
/ mouseleave
,这很好。问题是当mouseover
父span id="x_1"
鼠标内的span
被触发时。
我希望mousenter
/ mouseleave
仅在父{I} mouseenter
或mouseleave
时触发。
任何想法如何避免这种情况?
答案 0 :(得分:2)
简答:你无法避免这种情况, 但是你可以确定mouseleave / enter只发生在父
上function mouseleaveOrEnterHandler(e){
e = e || window.event;
var target = e.target || e.which;
if(target.id=='x') {
//do something here
}
}
答案 1 :(得分:1)
请具体说明您想要触发哪些元素。如果你使用jQuery:$("span#x").hover(function() {
//action logic for mouse enter
}, function() {
//action logic for mouse leave
});
答案 2 :(得分:0)
您需要cancelBubble()
和stopPropagation()
。
见这里:http://www.thedutchguy.com/article/javascript-prevent-event-bubbling-parent-child-when-fired.html
答案 3 :(得分:0)
也...
MooTools具有mouseenter和 mouseleave因为mouseover / mouseout 有时只是不起作用 预期。 Mouseenter只触发一次 你输入元素而不是 如果你的鼠标穿过,再次开火 元素的孩子。
......所以它几乎可以满足你们的建议并且工作正常。 http://demos.mootools.net/Mouseenter
以防万一有人正在寻找如何使用mootools来阻止传播......
$('myelement')。addEvent('click',function(e){ var event = e || window.event; if(event.stopPropagation){ event.stopPropagation(); } else { event.cancelBubble = true; } });
感谢您的帮助!