有没有办法让这两种方法一起工作,还是我必须尝试使用mouseenter和mouseleave?
答案 0 :(得分:22)
您可以将event.stopPropagation()
与.hover()
一起使用,但实际上 3>} mouseenter
与mouseleave
一起使用.hover()
。如果向.hover()
提供1个函数,它将在两个事件上运行,如果提供2个函数,则第一个是mouseenter
处理程序,第二个是mouseleave
处理程序。
但是,这可能不是您所追求的......因为mouseenter
在进入孩子时不会触发 ,这实际上就是它存在的原因{{3}输入孩子时,将开火。 mouseout
,从上到下悬停,评论并取消注释.stopPropagation()
,它没有任何区别......因为事件不会冒泡到父级。
但是,如果您使用的是You can see that's there's no difference in a demo here和mouseover
,那么就像这样:
$("li").mouseover(function(e) {
$(this).addClass("red").parents().removeClass("red");
}).mouseout(function(e) {
$(this).removeClass("red");
});
现在我们遇到了冒泡问题,因为事件正在冒泡,将类添加到我们刚刚从mouseout
移除的父级。但是,如果我们停止那个泡泡,使用see a demo of the problem here,我们会得到所需的效果,如下所示:
$("li").mouseover(function(e) {
$(this).addClass("red").parents().removeClass("red");
e.stopPropagation();
}).mouseout(function(e) {
$(this).removeClass("red");
});
简而言之:是 You can see in this demo how this works differently适用于event.stopPropagation()
,但很可能,