jQuery:.live()的问题

时间:2012-01-20 13:59:24

标签: jquery

这可行(.hover):

$('a.directory:not(.trashContent), a.file:not(.trashContent)').hover(function() {
    if (!dragged) $(this).find('a.suppr:first').show();
}, function() {
    $(this).find('a.suppr:first').hide();
});

这不起作用(.live('hover')):

$('a.directory:not(.trashContent), a.file:not(.trashContent)').live('hover', function() {
    if (!dragged) $(this).find('a.suppr:first').show();
}, function() {
    $(this).find('a.suppr:first').hide();
});

知道为什么吗?

2 个答案:

答案 0 :(得分:3)

它不起作用的原因是,悬停不是真正的单一事件。它将用于mouseenter和mouseleave的事件处理程序绑定在一起。 意味着悬停本身不是一个真正的自己的事件处理程序。要使其与live(更好地使用.on())一起使用,您必须使用分离的事件处理程序。

$("#Element").live({
  mouseenter:function(){
    //do something
  },
  mouseleave:function(){
    //do something
  }
});

答案 1 :(得分:-2)

.live很老了。从jQuery 1.7开始,jQuery中有一个全新的Event API,您应该对所有事件使用.on()

一个例子:

$('a.directory:not(.trashContent), a.file:not(.trashContent)').on('mouseenter', function() {
  console.log('You have hovered on ' + $(this));
});

您可以更好地选择与.is()组合的元素:

$('a.directory, a.file').is(':not(.trashContent)', function() {
  var $elem = jQuery(this);
  $elem.on('mouseenter', function() {
     console.log('You have hovered on ' + $elem);
  });
});