菜单中的jquery mouseenter mouseout

时间:2012-02-12 21:28:49

标签: jquery mouseout mouseenter

我遇到了一些jquery菜单mouseenter问题。当鼠标输入pp仍为display block时如何修复?

<script>
$(document).ready(function() {
    $('a').mouseenter(function(){
        $('p').css('display','none');
        $(this).next('p').slideDown('slow');
    }).mouseleave(function(){
        $('p').slideUp('slow');
    });
    $('p').mouseenter(function(){
        $(this).css('display','block');
    });​
});
</script>
<div>
    <a>menu1</a>
    <p>about us</p>
    <a>menu2</a>
    <p>contact</p>
</div>
<style>
div{
    position:relative;
    z-index:0; 
    width:600px;
    height:20px;    
}
p{
    display:none;
    position:absolute;
    top:20px;
    left:0;
    width:300px;
    height:100px;
    background:#ccc;
}​
</style>
​

现场演示:http://jsfiddle.net/KTvf7/

3 个答案:

答案 0 :(得分:1)

为什么不使用<ul>?我认为这对你要做的事情更好。

<强> HTML:

<ul>
    <li>
        <a href="#">Menu One</a>
        <p>About Us</p>
    </li>
    <li>
        <a href="#">Menu Two</a>
        <p>Contact Us</p>
    </li>    
</ul>

<强>的CSS:

li { float: left; padding: 0 2em; }
p {
    height: 100px;
    background: red;
    padding: 0 2em;
    display: none;
    position: absolute;
}

<强> JQ:

$('li').hover(function(){
    $(this).find('p').stop(true, true).slideDown();
}, function(){
    $(this).find('p').stop(true, true).slideUp();
});

示例

jsFiddle

答案 1 :(得分:0)

修正了你...

  $('a').mouseenter(function(){
    $('p').css('display','none');
    $(this).next('p').slideDown('slow');});
$('p').mouseleave(function(){
    $('p').slideUp('slow');
});
$('p').mouseenter(function(){
    $(this).css('display','block');
});

答案 2 :(得分:0)

最好以其他方式构建菜单,例如:

    <ul class="menu">
        <li>item
            <ul>
                <li>sub item</li>
                <li>sub item</li>
                <li>sub item</li>
            </ul>
        </li>
    </ul>

并将.menu li ul { display: none; }添加到css。

在此结构中,进入和离开.menu > li效果很好。


如果您仍想坚持自己的结构,则只能将mouseleave附加到容器中。我在这个fiddle

中给了它一个课.menu
$('.menu a').mouseenter(function(){
    $('.menu p').css('display', 'none');
    $(this).next('p').slideDown('slow');
})

$('.menu').mouseleave(function(){
    $('p', this).slideUp('slow');
});