e.stopPropagation()和jQuery.hover()

时间:2010-06-01 03:52:20

标签: javascript jquery

有没有办法让这两种方法一起工作,还是我必须尝试使用​​mouseenter和mouseleave?

1 个答案:

答案 0 :(得分:22)

您可以将event.stopPropagation().hover()一起使用,但实际上 } mouseentermouseleave一起使用.hover()。如果向.hover()提供1个函数,它将在两个事件上运行,如果提供2个函数,则第一个是mouseenter处理程序,第二个是mouseleave处理程序。

但是,这可能不是您所追求的......因为mouseenter在进入孩子时不会触发 ,这实际上就是它存在的原因{{3}输入孩子时,开火。 mouseout,从上到下悬停,评论并取消注释.stopPropagation(),它没有任何区别......因为事件不会冒泡到父级。

但是,如果您使用的是You can see that's there's no difference in a demo heremouseover那么就像这样:

$("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");
});​

.stopPropagation()

简而言之: You can see in this demo how this works differently适用于event.stopPropagation(),但很可能,

>