<ul>
。我当前正在将.bind
与mouseover
和mouseout
结合使用。是否可以将.on
与hover
一起使用?这就是为什么我使用.on
而不是hover
的原因。#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
}
});
根据下面提供的答案,您可以将
hover
与.on()
结合使用,但是:尽管强烈建议不要使用新代码,您可能会看到
伪事件名称“ hover”用作字符串
“ mouseenter mouseleave”的简写。它为这两个事件附加一个事件处理程序,该处理程序必须检查event.type以确定该事件是mouseenter还是mouseleave。请勿将
“ hover”伪事件名称与.hover()方法混淆,该方法接受一个
或两个函数。
使用它没有性能优势,并且比仅使用
mouseenter
或mouseleave
更庞大。我提供的答案需要较少的代码,并且是实现类似目标的正确方法。EDIT
已经有一段时间了,因为这个问题得到了答案,而且似乎已经获得了一些牵引力。上面的代码仍然存在,但我确实想在原始答案中添加一些内容。
虽然我更喜欢将
mouseenter
和mouseleave
(帮助我了解代码中的情况)与.on()
结合使用,但这只是与使用hover()
编写以下内容相同$(".selector").hover(function () {
//stuff to do on mouse enter
},
function () {
//stuff to do on mouse leave
});
由于原始问题确实询问他们如何正确地将
on()
与hover()
结合使用,我认为我会更正on()
的用法,但找不到当时添加hover()
代码的方法。2012年12月11日编辑
下面提供的一些新答案详细说明了如果使用JavaScript填充有问题的
.on()
,div
应该如何工作。例如,假设您使用jQuery的div
事件填充了.load()
,如下所示:相反,您应该稍微修改代码,如下所示:(function ($) {
//append div to document body
$('<div class="selector">Test</div>').appendTo(document.body);
}(jQuery));
此代码将在发生
.on()
事件后,对使用JavaScript填充的元素起作用。只需将参数更改为适当的选择器即可。评论
@Scott,请注意,JonMcIntosh的答案无法回答我的问题,因为他仅使用了一半的悬停功能。
–瑞尔
2012年3月22日在17:28
这不适用于已添加到DOM中的元素。正如@Nik Chankov在下面指出的那样,这是.on()的正确用法,用于附加多个处理程序stackoverflow.com/questions/8608145/…
–soupy1976
2012年11月28日在9:29
@ soupy1976编辑了我的答案,现在它考虑了用JavaScript填充的元素。
– Sethen
2012年12月11日在17:21
@SethenMaleno-恰好,您的.on()解决方案可以删除伪悬停事件并使用真实的悬停事件。我喜欢您使用mouseenter / mouseleave +1说明的第一个
– Mark Schultheiss
13年2月27日在13:56
这次修改将我的投票从低票改为高票,表现出色,塞申,表现出色!
– Sean Kendle
13年8月13日在16:12
#2 楼
当鼠标移入/移出作为问题请求加载的文档后创建的对象时,这些解决方案都无法为我工作。我知道这个问题很旧,但是对于那些仍在寻找的人,我有一个解决方案:文档准备就绪后仍然可以调用它。评论
这个有合适的解决方案:stackoverflow.com/questions/8608145/…
– Nik Chankov
2012年10月22日14:28
这也是我如何使它工作的方式,我发现了一个可接受的答案,即在.load()事件之后,将选择器放在.on之前不起作用,但是可以。
– MattP
2012年11月17日14:17
@calebthebrewer编辑了我的答案,现在它考虑了用JavaScript填充的元素。
– Sethen
2012-12-11 17:21
在此处使用mouseover和mouseout事件将导致代码随着用户在元素内部移动鼠标而不断触发。我认为mouseenter和mouseleave更合适,因为它只会在进入时触发一次。
– johntrepreneur
13年1月25日在22:34
将文档作为根元素并不是最佳实践,因为它的性能令人失望。您正在监视文档,而使用load()时,大多数时候您只操作网站的一部分(例如#content)。因此最好尝试将其缩小到元素,那就是操纵。
–honk31
2013年9月24日14:22
#3 楼
我不确定其余的Javascript是什么样的,所以我将无法判断是否有任何干扰。但是.hover()
可以作为事件与.on()
一起很好地使用。 > $("#foo").on("hover", function() {
// disco
});
http://jsfiddle.net/hmUPP/2/
评论
这如何处理悬停使用的开/关功能?例如:$('#id')。hover(function(){// on},function(){// off});
–瑞尔
2012-03-22 17:21
对我来说,这是没有必要的。当您可以轻松摆脱.on()并将其替换为.hover()函数并获得相同的效果时,则无需在悬停时使用.on()结果。 jQuery不是要编写更少的代码吗?
– Sethen
2012年3月22日17:21
@Toast没有,请查看下面的答案,以了解如何使用.on()执行mouseenter和mouseleave函数
– Sethen
2012年3月22日17:22
我已经更新了答案,以包括两种事件类型的利用率。该功能与Sethen的答案相同,但具有不同的风格。
–乔恩·麦金托什(Jon McIntosh)
2012-03-22 17:42
jQuery 1.8中已弃用On()中的悬停事件支持,而jQuery 1.9中已将其删除。
–编码消失了
13年7月2日在8:08
#4 楼
jQuery悬停功能提供了mouseover和mouseout功能。$(选择器).hover(inFunction,outFunction);
$(".item-image").hover(function () {
// mouseover event codes...
}, function () {
// mouseout event codes...
});
来源:http://www.w3schools.com/jquery /event_hover.asp
评论
肯定有效。您被否决,因为有人丢了!谢了哥们
–贾里姆
17年4月5日在5:35
他不满意,因为如果您需要后期装订(“ on”方法即将进行),则此方法不起作用。
–拉里·布德(LarryBud)
20/12/22在1:26
#5 楼
刚从网上冲浪,觉得我可以有所作为。我注意到使用@calethebrewer发布的上述代码可能导致选择器上的多次调用和意外行为,例如:-$(document).on('mouseover', '.selector', function() {
//do something
});
$(document).on('mouseout', '.selector', function() {
//do something
});
此小提琴http:// jsfiddle .net / TWskH / 12 /我的观点。当对诸如插件中的元素进行动画处理时,我发现这些多个触发器会导致意外的行为,这可能导致调用动画或代码的次数超过了必要。
我的建议是简单地用mouseenter / mouseleave:-
$(document).on('mouseenter', '.selector', function() {
//do something
});
$(document).on('mouseleave', '.selector', function() {
//do something
});
尽管这阻止了我动画的多个实例被调用,但最终我还是根据需要决定使用鼠标悬停/ mouseleave来确定父母的孩子被悬停。
评论
该答案实际上提供了为文档选择器添加悬停事件的有效解决方案。 +1
–里奇·戴维斯(Rich Davis)
19年11月7日在20:50
#6 楼
您可以通过执行“其他说明”部分的说明将.on()
与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"); }
});
EDIT(针对jQuery 1.8+用户的注释):
jQuery 1.8(在1.9中删除):名称“ hover”用作字符串“ mouseenter mouseleave”的简写形式。它为这两个事件附加一个
事件处理程序,并且该处理程序必须检查
event.type以确定该事件是mouseenter还是mouseleave。
不要混淆“ hover”伪代码,事件名称带有.hover()方法,
接受一个或两个函数。
评论
当可以通过使用mouseenter和mouseleave轻松完成此工作时,这只是更多工作...我知道,这不能回答OP的原始问题,但是以这种方式使用悬停仍然不明智。
– Sethen
2012年3月22日17:43
这样做完全符合jQuery团队根据OP的建议建议您这样做的方式。但是,正如jQuery团队所建议的那样,强烈建议不要使用新代码。但是,它仍然是OP问题的正确答案。
–代码特立独行
2012年3月22日17:44
@斯科特-你比我快:-)。 @Sethen-两种方法都可以,但是请求者使用.hover()请求了功能。
–乔恩·麦金托什(Jon McIntosh)
2012年3月22日17:47
可以理解,但是我仍然认为OP一直在寻找一种适用于mouseenter和mouseleave的解决方案,而不仅仅是使它与悬停一起工作。如果没有出于性能原因使用悬停的真正原因,那么强烈建议不要在新代码上使用它吗?
– Sethen
2012年3月22日17:49
jQuery 1.8中已弃用On()中的悬停事件支持,而jQuery 1.9中已将其删除。
–编码消失了
13年7月2日在8:09
#7 楼
$("#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');
#8 楼
您可以提供一个或多个用空格隔开的事件类型。hover
等于mouseenter mouseleave
。这是我的建议:
$("#foo").on("mouseenter mouseleave", function() {
// do some stuff
});
评论
我喜欢jQ决定贬值此参数的决定。在版本1.8之前的版本中,用于将其悬停为名称空间与DOM事件,悬停,没有关系不符。
– Jim22150
14年7月14日在14:38
#9 楼
如果您需要它作为其他事件的条件,我可以通过以下方式解决它: />$('.classname').hover(
function(){$(this).data('hover',true);},
function(){$(this).data('hover',false);}
);
(我看到有人用
is(':hover')
来解决这个问题。但这还不是有效的jQuery选择器,并且不能在所有兼容的浏览器中使用)#10 楼
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
上找到
评论
在下面的评论中-jQuery 1.8中弃用了On()中的悬停事件支持,而jQuery 1.9中已将其删除。按照calebthebrewer的建议,尝试使用mouseenter和mouseleave的组合。