161

我正在使用以下 jquery 代码仅针对我们用鼠标悬停的表行显示上下文删除按钮。这有效,但不适用于动态添加 js/ajax 的行...

有没有办法通过现场活动进行这项工作?

$("table tr").hover(
  function () {},
  function () {}
);
4

6 回答 6

245

jQuery 1.4.1 现在支持 live() 事件的“悬停”,但只有一个事件处理函数:

$("table tr").live("hover",

function () {

});

或者,您可以提供两个函数,一个用于 mouseenter,一个用于 mouseleave:

$("table tr").live({
    mouseenter: function () {

    },
    mouseleave: function () {

    }
});
于 2010-02-14T19:54:16.297 回答
110
$('.hoverme').live('mouseover mouseout', function(event) {
  if (event.type == 'mouseover') {
    // do something on mouseover
  } else {
    // do something on mouseout
  }
});

http://api.jquery.com/live/

于 2010-06-30T14:38:01.617 回答
60

.live()自 jQuery 1.7 起已被弃用

改为使用.on()并指定后代选择器

http://api.jquery.com/on/

$("table").on({
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
}, "tr");  // descendant selector
于 2012-05-10T22:06:37.493 回答
5

从 jQuery 1.4.1 开始,悬停事件适用于live(). 它基本上只是绑定到 mouseenter 和 mouseleave 事件,您也可以对 1.4.1 之前的版本执行此操作:

$("table tr")
    .mouseenter(function() {
        // Hover starts
    })
    .mouseleave(function() {
        // Hover ends
    });

这需要两个绑定,但同样有效。

于 2010-02-14T19:46:06.820 回答
5

此代码有效:

    $(".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");
            }
        });
于 2010-06-08T04:34:02.527 回答
2

警告:实时版本的悬停会显着降低性能。在 IE8 的大页面中尤其明显。

我正在做一个项目,我们使用 AJAX 加载多级菜单(我们有我们的理由:)。无论如何,我使用 live 方法进行悬停,这在 Chrome 上效果很好(IE9 还可以,但不是很好)。然而,在 IE8 中,它不仅减慢了菜单的速度(您必须悬停几秒钟才能下降),而且页面上的所有内容都非常缓慢,包括滚动甚至检查简单的复选框。

在事件加载后直接绑定事件会产生足够的性能。

于 2011-07-26T18:45:23.307 回答