如何修复这个JQuery下拉菜单?

时间:2009-04-02 00:25:14

标签: javascript jquery menu drop-down-menu

我尝试在JQuery中创建一个下拉菜单,但事实证明这很难。

我的代码在这里:

  $(document).ready(function(){

        $('ul li').mouseover(function()
        {
              $(this).children("ul").show();
        });
        $('ul li ul').mouseover(function()
        {
              $('ul li ul').show();
        }).mouseout(function(){
              $('ul li ul').hide();
        });

  });

基本上我想将鼠标悬停在列表项上并将子ul拖放到下拉列表中,然后我可以将鼠标悬停在列表项上,如果鼠标离开子导航,则菜单会再次隐藏。

感谢, 基思

更新:我从CSS中移除了边框并且它工作正常,因此当我将鼠标悬停在1px边框上时会出现鼠标输出,非常奇怪。

4 个答案:

答案 0 :(得分:4)

您应该使用jQuery's hover() function,因为它可以避免所有类型的浏览器特定问题。

如果没有一点点测试,我会想象代码看起来更像是:

    $('.clearfix li').hover(function() {
          $('ul', this).show();
        }, function() {
          $('ul', this).hide();
        });

答案 1 :(得分:1)

您知道superfish吗?它是菜单jQuery插件,具有出色的跨浏览器支持。它肯定没有您遇到的问题。我没有检查源代码,但关键的区别是它增加了mouseout的延迟。这意味着除非光标的位置稳定一段时间(默认延迟为800毫秒),否则不会触发动作。这将解决您的问题,也是一个很好的实现,因为它将使您的菜单更加用户友好。

答案 2 :(得分:0)

问题是,边框在框外“。如果您只需将下拉菜单向上移动1个像素,它就会与菜单栏重叠1个像素。

只需将CSS中下拉菜单的顶部位置从30px更改为29px即可:

        ul li ul {
            border: none;
            position: absolute;
            top: 29px; /* <-- was 30px */

答案 3 :(得分:0)

它在我的Firefox 1.5.0.1版本上运行正常可能您没有最新版本。我自己运行一个图像库,但我不认为布局的类型对我来说非常好,因为我对我的图像有描述,而且一些图像非常大。我不知道,可能值得尝试。