jquery mouseenter mouseout в меню - PullRequest
       13

jquery mouseenter mouseout в меню

0 голосов
/ 13 февраля 2012

Я столкнулся с некоторой проблемой с мышью в меню jquery. Как исправить когда при вводе мышкой p, p по-прежнему 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 ]

1 голос
/ 13 февраля 2012

Почему бы вам не использовать <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

0 голосов
/ 13 февраля 2012

Лучше структурировать ваше меню иначе, например:

    <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 к контейнеру.Я дал ему класс .menu в этой скрипке :

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

$('.menu').mouseleave(function(){
    $('p', this).slideUp('slow');
});
0 голосов
/ 13 февраля 2012

Исправлено для тебя ..

  $('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');
});
...