jQuery的实时悬停


161

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

有没有办法通过现场直播来实现这一目标?

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

Answers:


245

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

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

function () {

});

另外,您可以提供两种功能,一种用于mouseenter,另一种用于mouseleave:

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

    },
    mouseleave: function () {

    }
});

虽然它仍然对我不起作用。我尝试这样做:我哪里出错了?> $('table tr')。live('hover',function(){$(this).find('。deletebutton')。toggle();});
Shripad克里希纳

1
这是不正确的,不起作用。请参阅以下文档的“多个事件”标题liveapi.jquery.com/live
Jason

34
从jQuery 1.4.2开始,.live(“ hover”)等同于.live(“ mouseover mouseout”),而不是.live(“ mouseenter mouseleave”)-请参见bugs.jquery.com/ticket/6077这样。 live(“ mouseenter mouseleave”,function(){...})或.live(“ mouseenter”,function(){...})。live(“ mouseleave”,function(){...})
AEM

2
谢谢@aem,这对我有用:$(“ table tr”)。live(“ mouseenter”,function(){...})。live(“ mouseleave”,function(){...});
jackocnr

3
根据JQuery .live文档页面上的说明,请改为使用.on。“从jQuery 1.7开始,不推荐使用.live()方法。请使用.on()附加事件处理程序。”
johntrepreneur 2013年

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/


也为我工作。+1尝试通过鼠标悬停和mouseenter来制作Philippe的版本-均无效。但是,这个做到了。谢谢!
eduncan911

.live现在已弃用,请参阅Andre的替换方法答案。
johntrepreneur

1
在此处使用mouseovermouseout事件将导致代码随着用户在元素内部移动鼠标而不断触发。我认为mouseenter并且mouseleave更合适,因为它只会在进入时触发一次。
johntrepreneur

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

6
从jQuery 1.9开始,它可以完美工作。所有实时和委托解决方案均已弃用!如果有人不能接受已接受的答案,而是接受这个答案,那将是非常棒的。
jascha 2013年

5

从jQuery 1.4.1开始,hover事件与一起使用live()。它基本上只绑定到mouseenter和mouseleave事件,您也可以对1.4.1之前的版本进行处理:

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

这需要两个绑定,但效果也一样。


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");
            }
        });

2
什么是“ ui-state-hover”?这如何适用于用户的原始问题?
IgorGanapolsky 2010年

2

警告:实时版本的悬停会大大降低性能。在IE8上的大页面上尤其值得注意。

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

加载事件后立即对其进行绑定会产生足够的性能。


2
有用,但评论多于答案。
mikemaccana '02
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.