【发布时间】:2011-01-16 18:37:36
【问题描述】:
我正在使用以下 jquery 代码来显示上下文删除按钮,仅用于我们用鼠标悬停的表行。这有效,但不适用于动态添加 js/ajax 的行...
有没有办法在现场活动中实现这一点?
$("table tr").hover(
function () {},
function () {}
);
【问题讨论】:
标签: jquery live jquery-1.4
我正在使用以下 jquery 代码来显示上下文删除按钮,仅用于我们用鼠标悬停的表行。这有效,但不适用于动态添加 js/ajax 的行...
有没有办法在现场活动中实现这一点?
$("table tr").hover(
function () {},
function () {}
);
【问题讨论】:
标签: jquery live jquery-1.4
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 documentation page,它说要改用.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 开始,悬停事件适用于 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 中,它不仅减慢了菜单的速度(您必须悬停几秒钟才能掉落),而且页面上的所有内容都非常缓慢,包括滚动甚至检查简单的复选框。
在事件加载后直接绑定事件可以获得足够的性能。
【讨论】: