1

我想为 hover() 快捷方式创建一组超级简单的处理程序,但我一直失败。我最终只是选择了 mouseenter/mouseleave,但我想看看我的问题是什么,以备将来使用。

$function(){
     $('div.profile').find('li:gt(0)').each(function(){
           this.hover(highlight,offlight);
});
});

var highlight=function(){
   $(this).css("background","blue");
}

var offlight=function(){
   $(this).css("background","none");
}

好的,所以这可能充满了错误。首先,我不确定“this”函数上下文是否在后两个函数定义中有效,因为这并没有真正在就绪处理程序之外定义。如果它不起作用,我可以在这里做任何其他事情来确保突出显示的“li”是同一个悬停在上面的吗?我应该只制作高亮和关闭匿名函数还是有其他方法?

2)似乎无论我做什么,我的悬停事件处理程序都会失败。我认为我在这里正确使用了每个功能。我不知道给了什么。

4

2 回答 2

3

您正在调用.hover()一个 DOM 元素。而是在 jQuery 对象上调用它。

//-----v------was missing the "("
      $(function() {
           $('div.profile').find('li:gt(0)').hover(highlight,offlight);
      });
// attach .hover() to all the <li> found-------^

如您所见,不需要.each().


:hover总的来说,如果您所做的只是简单的背景更改,我会使用 CSS伪选择器:

  $(function() {
       $('div.profile').find('li:gt(0)').addClass( "hoverMe" );
  });

css

li.hoverMe {
    background:none;
}
li.hoverMe:hover {
    background:blue;
}

IE6但是,如果不对您的标记进行一些调整,将无法正常工作。

于 2011-02-21T20:33:02.847 回答
2

在您的each函数中,this不引用 jQuery 对象。您需要将其包装在$()

$(this).hover(highlight,offlight);
于 2011-02-21T20:32:45.223 回答