Answers:
jQuery 1.4.1现在支持live()事件的“悬停”,但仅具有一个事件处理函数:
$("table tr").live("hover",
function () {
});
另外,您可以提供两种功能,一种用于mouseenter,另一种用于mouseleave:
$("table tr").live({
mouseenter: function () {
},
mouseleave: function () {
}
});
live
:api.jquery.com/live
.live
文档页面上的说明,请改为使用.on
。“从jQuery 1.7开始,不推荐使用.live()方法。请使用.on()附加事件处理程序。”
$('.hoverme').live('mouseover mouseout', function(event) {
if (event.type == 'mouseover') {
// do something on mouseover
} else {
// do something on mouseout
}
});
.live
现在已弃用,请参阅Andre的替换方法答案。
mouseover
和mouseout
事件将导致代码随着用户在元素内部移动鼠标而不断触发。我认为mouseenter
并且mouseleave
更合适,因为它只会在进入时触发一次。
.live()
从jQuery 1.7开始不推荐使用
使用.on()
代替并指定后代选择器
$("table").on({
mouseenter: function(){
$(this).addClass("inside");
},
mouseleave: function(){
$(this).removeClass("inside");
}
}, "tr"); // descendant selector
从jQuery 1.4.1开始,hover事件与一起使用live()
。它基本上只绑定到mouseenter和mouseleave事件,您也可以对1.4.1之前的版本进行处理:
$("table tr")
.mouseenter(function() {
// Hover starts
})
.mouseleave(function() {
// Hover ends
});
这需要两个绑定,但效果也一样。
此代码有效:
$(".ui-button-text").live(
'hover',
function (ev) {
if (ev.type == 'mouseover') {
$(this).addClass("ui-state-hover");
}
if (ev.type == 'mouseout') {
$(this).removeClass("ui-state-hover");
}
});
警告:实时版本的悬停会大大降低性能。在IE8上的大页面上尤其值得注意。
我正在一个项目中,我们使用AJAX加载多级菜单(我们有原因:)。无论如何,我使用了live方法进行悬停,这在Chrome上效果很好(IE9可以,但效果不佳)。但是,在IE8中,它不仅减慢了菜单速度(您必须将鼠标悬停几秒钟才能掉落),而且页面上的所有内容都非常缓慢,包括滚动甚至选中简单的复选框。
加载事件后立即对其进行绑定会产生足够的性能。