小编典典

是否可以使用 jQuery .on 和悬停?

all

我有一个<ul>在初始页面加载后填充了 javascript 的内容。我目前正在使用.bindwithmouseovermouseout

该项目刚刚更新到 jQuery 1.7,所以我可以选择使用.on,但我似乎无法使用它hover。可以.onhover吗?

编辑 :我绑定到的元素在文档加载后用 javascript 加载。这就是我使用的原因on,而不仅仅是hover.


阅读 216

收藏
2022-03-29

共1个答案

小编典典

( _如果您需要使用.on()用 JavaScript 填充的元素,_请查看此答案中的最后一个编辑)

将此用于未使用 JavaScript 填充的元素:

$(".selector").on("mouseover", function () {
    //stuff to do on mouseover
});

.hover()有它自己的处理程序: http:
//api.jquery.com/hover/

如果您想做多件事,请将它们链接到.on()处理程序中,如下所示:

$(".selector").on({
    mouseenter: function () {
        //stuff to do on mouse enter
    },
    mouseleave: function () {
        //stuff to do on mouse leave
    }
});

根据下面提供的答案,您可以使用hoverwith .on(),但是:

尽管强烈建议不要使用新代码,但您可能会看到伪事件名称“hover”用作字符串“mouseenter
mouseleave”的简写。它为这两个事件附加了一个事件处理程序,处理程序必须检查 event.type 以确定事件是 mouseenter 还是
mouseleave。不要将“悬停”伪事件名称与接受一两个函数的 .hover() 方法混淆。

此外,使用它并没有性能优势,而且它比仅使用mouseenteror更庞大mouseleave。我提供的答案需要更少的代码,并且是实现此类目标的正确方法。

编辑

自从这个问题得到回答已经有一段时间了,它似乎已经获得了一些关注。上面的代码仍然有效,但我确实想在我的原始答案中添加一些内容。

虽然我更喜欢使用mouseenterand
mouseleave(帮助我理解代码中发生了什么),.on()但它与编写以下内容相同hover()

$(".selector").hover(function () {
    //stuff to do on mouse enter
}, 
function () {
    //stuff to do on mouse leave
});

由于最初的问题确实询问了他们如何正确使用on()with hover(),我想我会更正 of
的用法,on()并且当时没有必要添加hover()代码。

编辑 2012 年 12 月 11 日

下面提供的一些新答案详细说明了如果使用 JavaScript 填充相关问题.on()应该如何工作。div例如,假设您div使用
jQuery填充一个.load()事件,如下所示:

(function ($) {
    //append div to document body
    $('<div class="selector">Test</div>').appendTo(document.body);
}(jQuery));

上面的代码是.on()站不住脚的。相反,您应该稍微修改您的代码,如下所示:

$(document).on({
    mouseenter: function () {
        //stuff to do on mouse enter
    },
    mouseleave: function () {
        //stuff to do on mouse leave
    }
}, ".selector"); //pass the element as an argument to .on

.load()在事件发生后,此代码将适用于使用 JavaScript 填充的元素。只需将您的参数更改为适当的选择器。

2022-03-29