Answers:
(如果需要与使用.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
}
});
根据下面提供的答案,您可以将hover
搭配使用.on()
,但:
尽管强烈建议不要使用新代码,但是您可能会看到伪事件名称“ hover”用作字符串“ mouseenter mouseleave”的简写。它为这两个事件附加了一个事件处理程序,该处理程序必须检查event.type以确定该事件是mouseenter还是mouseleave。不要将“ hover”伪事件名称与.hover()方法混淆,该方法接受一个或两个函数。
另外,使用它没有性能上的优势,它比仅使用mouseenter
or 更庞大mouseleave
。我提供的答案需要更少的代码,并且是实现类似目标的正确方法。
编辑
回答这个问题已经有一段时间了,似乎已经吸引了一些注意。上面的代码仍然有效,但是我确实想在原始答案中添加一些内容。
虽然我更喜欢使用mouseenter
and mouseleave
(帮助我理解代码中发生了什么),.on()
但它与使用hover()
$(".selector").hover(function () {
//stuff to do on mouse enter
},
function () {
//stuff to do on mouse leave
});
由于最初的问题确实询问了它们如何on()
与with一起正确使用hover()
,所以我认为我会更正的用法,on()
因此当时没有必要添加hover()
代码。
编辑2012年12月11日
下面提供的一些新答案详细说明了.on()
如果div
使用JavaScript填充问题代码,应该如何工作。例如,假设您div
使用jQuery的.load()
事件填充a ,如下所示:
(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填充的元素。只需将参数更改为适当的选择器即可。
.on()
解决方案可以删除伪悬停事件并使用真实的悬停事件。我喜欢你的mouseenter所示的第一个/鼠标离开+1为
当鼠标移入/移出在作为问题请求加载文档后创建的对象时,这些解决方案都无法为我工作。我知道这个问题很旧,但是对于那些仍在寻找的人,我有一个解决方案:
$("#container").on('mouseenter', '.selector', function() {
//do something
});
$("#container").on('mouseleave', '.selector', function() {
//do something
});
这会将功能绑定到选择器,以便在文档准备好后使用该选择器创建的对象仍可以调用它。
mouseover
和mouseout
事件将导致代码随着用户在元素内部移动鼠标而不断触发。我认为mouseenter
并且mouseleave
更合适,因为它只会在进入时触发一次。
我不确定其余的Javascript是什么样的,所以我将无法判断是否有任何干扰。但.hover()
与配合使用时效果很好.on()
。
$("#foo").on("hover", function() {
// disco
});
如果您希望能够利用其事件,请使用事件返回的对象:
$("#foo").on("hover", function(e) {
if(e.type == "mouseenter") {
console.log("over");
}
else if (e.type == "mouseleave") {
console.log("out");
}
});
$('#id').hover(function(){ //on }, function(){ //off});
.on()
与hover
当你可以很容易地摆脱.on()
并用其替换.hover()
功能,并得到了相同的结果。jQuery不是要编写更少的代码吗?
mouseenter
,并mouseleave
与功能.on()
hover
On()
jQuery 1.8 中已弃用事件支持,而jQuery 1.9中已将其删除。
jQuery悬停功能提供了mouseover和mouseout功能。
$(".item-image").hover(function () {
// mouseover event codes...
}, function () {
// mouseout event codes...
});
刚从网上冲浪,觉得我可以贡献力量。我注意到@calethebrewer发布的上述代码可能导致选择器上的多次调用和意外行为,例如:-
$(document).on('mouseover', '.selector', function() {
//do something
});
$(document).on('mouseout', '.selector', function() {
//do something
});
这个小提琴http://jsfiddle.net/TWskH/12/ illustrait代表了我的观点。当对诸如插件中的元素进行动画处理时,我发现这些多个触发器会导致意外的行为,这可能导致动画或代码被调用的次数超过了必要。
我的建议是简单地用mouseenter / mouseleave代替:-
$(document).on('mouseenter', '.selector', function() {
//do something
});
$(document).on('mouseleave', '.selector', function() {
//do something
});
尽管这阻止了我的动画的多个实例被调用,但最终我还是决定使用鼠标悬停/ mouseleave来确定何时将父级的孩子悬停在上面。
您可以使用.on()
与hover
通过执行附加注释部分所说的话:
尽管强烈建议不要使用新代码,但是您可能会看到伪事件名称“ hover”用作字符串“ mouseenter mouseleave”的简写。它为这两个事件附加了一个事件处理程序,该处理程序必须检查event.type以确定该事件是mouseenter还是mouseleave。不要将“ hover”伪事件名称与.hover()方法混淆,该方法接受一个或两个函数。
那将要执行以下操作:
$("#foo").on("hover", function(e) {
if (e.type === "mouseenter") { console.log("enter"); }
else if (e.type === "mouseleave") { console.log("leave"); }
});
编辑(对jQuery 1.8+用户的注释):
在jQuery 1.8中已弃用,在1.9中已删除:名称“ hover”用作字符串“ mouseenter mouseleave”的简写。它为这两个事件附加了一个事件处理程序,该处理程序必须检查event.type以确定该事件是mouseenter还是mouseleave。不要将“ hover”伪事件名称与.hover()方法混淆,该方法接受一个或两个函数。
mouseenter
and 来完成这项工作时,mouseleave
... ...我知道,这不能回答OP的原始问题,但是hover
以这种方式使用仍然是不明智的。
.hover()
。
mouseenter
,mouseleave
而不仅仅是使其与一起使用hover
。如果hover
出于性能方面的原因没有真正的理由使用,那么强烈建议不要在新代码中使用它?
hover
On()
jQuery 1.8 中已弃用事件支持,而jQuery 1.9中已将其删除。
$("#MyTableData").on({
mouseenter: function(){
//stuff to do on mouse enter
$(this).css({'color':'red'});
},
mouseleave: function () {
//stuff to do on mouse leave
$(this).css({'color':'blue'});
}},'tr');
您可以提供由空格分隔的一种或多种事件类型。
所以hover
等于mouseenter mouseleave
。
这是我的建议:
$("#foo").on("mouseenter mouseleave", function() {
// do some stuff
});
jQuery插件hoverIntent http://cherne.net/brian/resources/jquery.hoverIntent.html比这里列出的简单方法得多。尽管它们确实起作用,但它们不一定会表现出用户的期望。
使用hoverIntent的最强原因是超时功能。它允许您执行诸如阻止菜单关闭之类的操作,因为用户在单击所需项目之前将鼠标稍微向左或向右拖动。它还提供了在弹幕中不激活悬停事件的功能,并等待有重点的悬停。
用法示例:
var config = {
sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)
interval: 200, // number = milliseconds for onMouseOver polling interval
over: makeTall, // function = onMouseOver callback (REQUIRED)
timeout: 500, // number = milliseconds delay before onMouseOut
out: makeShort // function = onMouseOut callback (REQUIRED)
};
$("#demo3 li").hoverIntent( config )
对此的进一步说明可以在https://stackoverflow.com/a/1089381/37055上找到
mouseenter
和的组合mouseleave
。