鼠标悬停在链接上显示相邻的隐藏div

时间:2010-06-26 17:03:19

标签: jquery html

我有以下HTML和Javascript。我只想在鼠标悬停链接时一次显示隐藏的一个。如果鼠标位于链接“饮料”上,则仅显示该链接下方的隐藏div,其他隐藏的div必须保持隐藏状态。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>
            Untitled Document
        </title>
        <script type="text/javascript" src="jquery.js">
        </script>
        <script type="text/javascript">
            $(document).ready(function() {


// timer for hiding the div
var hideTimer;

// show the DIV on mouse over
$(".show_div").mouseover(function() {
    // forget any hiding events in timer
    clearTimeout( hideTimer );
    $(".hello").css('visibility', 'visible');
});

$(".hello").mouseover(function() {
    clearTimeout( hideTimer );
    $(".hello").css('visibility', 'visible');
});

// set a timer to hide the DIV
$(".show_div").mouseout(function() {
    hideTimer = setTimeout( hideHello, 333 );
});

$(".hello").mouseout(function() {
    hideTimer = setTimeout( hideHello, 333 );
});

// hides the DIV
function hideHello() {
    $(".hello").css('visibility', 'hidden');
}

                });
        </script>

    </head>

    <body>
<br/>



<table border="1" width="400">
<tr>
<th>Header 1</th>
<th>Header 2</th>
</tr>
<tr>
<td><a class="show_div" href="#">Drink</a>
    <div class="hello" style="visibility:hidden;z-index:999;position: absolute;background-color:#99CC67;">
        <ul>
            <li>
                Coffee
            </li>
            <li>
                Tea
            </li>
            <li>
                Milk
            </li>
        </ul>
    </div>
</td>
<td><a class="show_div" href="#">Friuts</a>
    <div class="hello" style="visibility:hidden;z-index:999;position: absolute;background-color:#99CC67;">
        <ul>
            <li>
                Banana
            </li>
            <li>
                Water Melon
            </li>
            <li>
                Lychee
            </li>
        </ul>
    </div>
</td>
</tr>
<tr>
<td><a class="show_div" href="#">Movies</a>
    <div class="hello" style="visibility:hidden;z-index:999;position: absolute;background-color:#99CC67;">
        <ul>
            <li>
                Avatar
            </li>
            <li>
                Star War
            </li>
            <li>
                Titanic
            </li>
        </ul>
    </div>
</td>
<td><a class="show_div" href="#">Books</a>
    <div class="hello" style="visibility:hidden;z-index:999;position: absolute;background-color:#99CC67;">
        <ul>
            <li>
                Novel
            </li>
            <li>
                History
            </li>
            <li>
                Design
            </li>
        </ul>
    </div>
</td>
</tr>
</table> 

<br/>
    </body>

</html>

任何人都可以帮我解决这个问题吗?谢谢。

4 个答案:

答案 0 :(得分:2)

您可以选择实现的目标。您可以使用其他方法获得相同的结果,而不是坚持使用此方法。

请参阅下面的示例,该示例最初来自scottonwriting,但我让示例看起来与您的相似。这是使用scottonwriting

中建议的工具提示的示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>
            Untitled Document
        </title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js">
        </script>
        <style type="text/css">
            .skmTooltipHost { border-bottom: dotted 1px brown; } .skmTooltipContainer
            { padding-left: 20px; padding-right: 10px; padding-top: 3px; padding-bottom:
            3px; display: none; position: absolute; background-color: #ff9; border:
            solid 1px #333; width :300px; z-index: 999; }
        </style>
        <script type="text/javascript">
            $(document).ready(function() {


                $(".skmTooltipHost").hover(

                function() {
                    $(this).append('<div class="skmTooltipContainer">' + $(this).attr('tooltip') + '</div>');

                    $(this).find('.skmTooltipContainer').css("left", $(this).position().left + 20);
                    $(this).find('.skmTooltipContainer').css("top", $(this).position().top + $(this).height());
                    $(".skmTooltipContainer").fadeIn(10);
                },

                function() {
                    $(".skmTooltipContainer").fadeTo(10, 0.1, function() {
                        $(this).remove();
                    });
                });

            });
        </script>
    </head>

    <body>
        <br/>
        <table border="1" width="400">
            <tr>
                <th>
                    Header 1
                </th>
                <th>
                    Header 2
                </th>
            </tr>
            <tr>
                <td>
                    <p>
                        <span tooltip="Choose your drink:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Coffe&lt;/li&gt;&lt;li&gt;Tea&lt;/li&gt;&lt;li&gt;&lt;a target=_blank href=http://www.w3schools.com&gt;Visit W3Schools.com!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;"
                        class="skmTooltipHost">
                            Drinks
                        </span>
                    </p>
                </td>
                <td>
                    <p>
                        <span tooltip="Choose your fruit:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Orange&lt;/li&gt;&lt;li&gt;Banana&lt;/li&gt;&lt;li&gt;&lt;a target=_blank href=http://www.w3schools.com&gt;Visit W3Schools.com!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;"
                        class="skmTooltipHost">
                            Fruit
                        </span>
                    </p>
                    </a>
                </td>
            </tr>
            <tr>
                <td>
                    <p>
                        <span tooltip="Choose your movie:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Avatar&lt;/li&gt;&lt;li&gt;Titanic&lt;/li&gt;&lt;li&gt;&lt;a target=_blank href=http://www.w3schools.com&gt;Visit W3Schools.com!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;"
                        class="skmTooltipHost">
                            Movie
                        </span>
                    </p>
                    </a>
                </td>
                <td>
                    <p>
                        <span tooltip="Choose your book:&lt;div&gt;&lt;ul&gt;&lt;li&gt;History&lt;/li&gt;&lt;li&gt;Novel&lt;/li&gt;&lt;li&gt;&lt;a target=_blank href=http://www.w3schools.com&gt;Visit W3Schools.com!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;"
                        class="skmTooltipHost">
                            Drink
                        </span>
                    </p>
                </td>
            </tr>
        </table>
        <br/>
        <br/>
    </body>

</html>

总有另一种选择。希望这有帮助。

答案 1 :(得分:1)

如果您的标记最终发生变化,您可能需要试用siblings()函数。

编辑 - 针对鼠标悬停进行了更新(更好地了解了您正在做的事情)。请记住,你应该使用display:none而不是visibility:hidden,这样你就可以通过hide / show,fadeIn,fadeOut,slideDown,slideUp等函数更轻松地控制它的可见性。

再次编辑:我终于明白了你的想法。当您将鼠标悬停在IT上时,您不希望div出现(就像下拉菜单一样)。这里修改了代码。

注意,这使用jQuery的hoverIntent插件。

$(document).ready(function() {
 $("a.show_div").hoverIntent({ // capture the link hover events
     over:  function() {
             var $sibling = $(this).siblings('div.hello').show(); // get the sibling div and show it
             $('div.hello').not($sibling).hide(); // hide the other divs
             $sibling.data('linkOver', true); // store the fact that the link triggered this
            },
     out: function() {   
            var $sibling = $(this).siblings('div.hello');
            $sibling.data('linkOver', false);
            if( $sibling.data('divOver') != true) { // only hide if the mouse isn't on the div
              $sibling.delay(200).fadeOut(500); // get the sibling div and hide it after .333 seconds
            }
          },
    timeout: 500   //time to fire the event - must be greater than div.hover's timeout                 
  });

 $("div.hello").hoverIntent({ //capture the div hover events
     over: function() {
             $(this).data('divOver', true); // store the fact we're over the div now
           },
     out:  function() {   
             var $div = $(this);
             $div.data('divOver', false);
             if( $div.data('linkOver') != true ) { // if we're not on the link
               $(this).delay(200).fadeOut(500);  // then hide the div
             }
           },
     timeout: 400
   });   
 });

这背后的想法是我们需要跟踪的其他项目之一。如果我们要在链接中隐藏div,我们需要确保我们目前不在div上。 div也是如此,确保我们不在链接上。

您可以在此处尝试:http://jsfiddle.net/Y2pLR/

我还更新了您的pastebin条目。

答案 2 :(得分:0)

尝试:

$('a.show_div').mouseover(function(){
  $('div.hello').css('visibility', 'hidden'); // hide all
  $(this).next('div.hello').css('visibility', 'visible'); // show this one
});

另外,如果要在鼠标进入/离开时显示/隐藏内容,请考虑使用hover方法。

答案 3 :(得分:0)

试试这个:

$(document).ready(function(){
   $('.show_div').mouseover(function(){
       $(this).next('.hello').show(); 
   })
   $('.show_div').mouseout(function(){
       $(this).next('.hello').hide(); 
   })
})

您还可以添加一些计时器以自动隐藏。 希望这能给你一些启发。