使用.on()关闭悬停jquery

时间:2013-08-12 14:24:35

标签: javascript jquery

我知道查询中的悬停方法允许您指定当用户悬停时会发生什么以及当用户不悬停时会发生什么。但是,我使用.on()来处理悬停事件,因为内容是动态创建的。当用户不悬停时,如何将其恢复到原始状态。这是我的代码,我尝试过.off()但它没有给出我正在寻找的结果:

$('tr').on('hover', 'td', function(){
    $(this).fadeTo(500, 1 )    
})

这是我尝试过的:

$('tr').off('hover', 'td', function(){
    $(this).fadeTo(500, .85 )         
})

感谢。

5 个答案:

答案 0 :(得分:11)

如果您想使用.on(),处理程序的事件是" mouseenter"和" mouseleave"。你可以通过一个电话来完成:

$('tr').on({
  mouseenter: function() {
    $(this).fadeTo(500, 1); // or whatever
  },
  mouseleave: function() {
    $(this).fadeTo(500, 0.85); // or whatever
  }
}, 'td');

您也可以使用CSS执行此操作,使用":hover"伪类。在某种程度上,即使在IE的旧版本中,它也能正常工作。您也可以为更改设置动画。

答案 1 :(得分:9)

这就是你需要的

$('tr').on('mouseenter', 'td', function(){

    $(this).fadeTo(500, 1 )

}).on('mouseleave', 'td', function(){

    $(this).fadeTo(500, .85 )


})

答案 2 :(得分:4)

您可以在纯CSS 中执行此操作,但请转到此处:

$('tr').on('mouseenter mouseleave', 'td', function( e ){       
    $(this).fadeTo(500, e.type=="mouseenter" ? 1 : 0.85 );    
});

使用悬停:

$('tr td').hover(function( e ){       
    $(this).fadeTo(500, e.type=="mouseenter" ? 1 : 0.85 );    
});

提示:
.on('hover'不会像使用方法参考mouseenter mouseleave那样单独直接引用$(selector).hover(handlerIn, handlerOut)事件,而只是hover事件。

要恢复:

$('tr').on('hover', 'td', function( e ){       
   // no separated "mouseenter" and no "mouseleave" e.type reference here :(
   // just "hover" event
});

$('tr').on('mouseenter mouseleave', 'td', function( e ){       
   // e.type are defined :)
});

$('tr').on('mouseenter', 'td', function( e ){       
   // function only for 'mouseenter' event
}).on('mouseleave', 'td', function(){
   // function only for 'mouseleave' event
});

$('tr td').hover(function( e ){       
   // e.type "mouseenter" and "mouseleave" are in event reference :)
});

// $("tr td").hover(handlerIn, handlerOut)

$('tr td').hover(function(){       
   // Method default // e.type reference == "mouseenter" 
}, function(){
   // Method default // e.type reference == "mouseleave" 
});

现在,这取决于您是否需要使用.on()(动态创建的元素)将事件委派给元素,或者.hover()是否适合您的需要。

关于.off()方法,您可以仔细查看它的作用:here
基本上,如果在某些时候你想删除任何进一步的事件委托给一个元素而不是你使用.off():

$('#selector').on('click', 'button', function(){

  // Function callback:
  alert('I will alert only once cause of off()');
  $('#selector').off('click', 'button');

});

答案 3 :(得分:2)

悬停不是一个事件,它是mouseentermouseleave事件处理程序的快捷方式

$('tr').on('mouseenter', 'td', function(){
    $(this).fadeTo(500, 1 )
}).on('mouseleave', 'td', function(){
    $(this).fadeTo(500, .85 )
})

答案 4 :(得分:0)

$('.element').hover(
    function () {
        $(this).fadeTo(500, 1);
    }, 
    function () {
        $(this).fadeTo(500, .85);
    }
);