我有一个<ul>,在初始页面加载后用javascript填充。我目前使用。bind与鼠标悬停和鼠标退出。
该项目刚刚更新到jQuery 1.7,所以我可以选择使用.on,但我似乎不能让它与悬浮。是否可以在鼠标悬停时使用。on ?
编辑:我要绑定的元素在文档加载后用javascript加载。这就是为什么我用on而不是hover。
我有一个<ul>,在初始页面加载后用javascript填充。我目前使用。bind与鼠标悬停和鼠标退出。
该项目刚刚更新到jQuery 1.7,所以我可以选择使用.on,但我似乎不能让它与悬浮。是否可以在鼠标悬停时使用。on ?
编辑:我要绑定的元素在文档加载后用javascript加载。这就是为什么我用on而不是hover。
当前回答
jQuery悬停函数提供了鼠标悬停和鼠标退出的功能。
$(选择).hover (inFunction outFunction);
$(".item-image").hover(function () {
// mouseover event codes...
}, function () {
// mouseout event codes...
});
来源:http://www.w3schools.com/jquery/event_hover.asp
其他回答
$("#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');
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上找到
如果你需要它在其他事件中作为条件,我是这样解决的:
$('.classname').hover(
function(){$(this).data('hover',true);},
function(){$(this).data('hover',false);}
);
然后在另一个事件中,你可以很容易地使用它:
if ($(this).data('hover')){
//...
}
(我看到一些人使用is(':hover')来解决这个问题。但这不是一个有效的jQuery选择器,并不能在所有兼容的浏览器中工作)
你可以使用.on()与hover通过做附加注释部分说:
虽然强烈不建议使用新代码,但是您可能会看到 伪事件名称“hover”用作字符串的简写 “mouseenter mouseleave”。它为这些附加了一个事件处理程序 两个事件,处理程序必须检查事件。要确定的类型 事件是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”的简写。它连着一个 这两个事件的事件处理程序,处理程序必须检查 事件。类型以确定事件是mouseenter还是mouseleave。 不要将"hover"伪事件名称与.hover()方法混淆, 它接受一两个函数。
刚从网上浏览过来,觉得我能帮点忙。我注意到@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
});
虽然这阻止了我的动画被调用的多个实例,但我最终还是使用了mouseover/mouseleave,因为我需要确定什么时候父对象的子对象被悬停。