在Jquery中下拉菜单

时间:2012-04-17 08:28:55

标签: jquery

你好朋友我已经尝试了下面的代码,因为你可以在这里看到http://jsfiddle.net/QCdz4/我想编写下拉菜单以显示在click()上并在mouseout()时消失,但它不起作用请帮助我提前谢谢

Jquery的

<script>
    $(document).ready(function(){
        $('.click ul').css({display:'none', position:'absolute'});
        $('.click').click(function() {
            $(this).children('ul').slideDown(200);
            $(this).on('mouseout', function() {
                $(this).children('ul').slideUp(200);
            })
        })
    })
</script>

HTML

<div class="click">
    click
    <ul>
        <li><a href="#">one</a></li>
        <li><a href="#">two</a></li>
        <li><a href="#">three</a></li>
        <li><a href="#">four</a></li>
    </ul>
</div>

4 个答案:

答案 0 :(得分:2)

您需要mouseleave而不是mouseout,因为当您从父元素悬停到子元素时,也会触发mouseout。父元素位于上方(读取:z-index)的父元素。在这种情况下,将光标从父元素移动到子元素将触发mouseout事件,但不会触发mouseleave事件。只有当您将光标移离父项及其子项时,才会触发mouseleave元素。

$(document).ready(function(){

   $('.click ul').css({display:'none', position:'absolute'});


   $('.click').on('click', function(){
       $("ul", $(this)).slideDown(200);
   }).on('mouseleave', function(){
       $("ul", $(this)).slideUp(200);
   });   


})

更新:可以在此处找到一篇非常好的文章和非常清晰的现场演示:Different between mouseout and mouseleave in jquery。 (查看带有子元素的正方形。右下角的那个)

答案 1 :(得分:1)

使用此

$(document).ready(function(){
    $('.click ul').css({display:'none', position:'absolute'});
$('.click').click(function(){

     $(this).children('ul').slideDown(200);
})

$('.click ul').hover(
  function () {
    // do nothing
  }, 
  function () {
    $('.click ul').slideUp(200);
  }
);
});

答案 2 :(得分:0)

你用错误的方式链接你的功能。

$('.click').click(function(){
     $(this).children('ul').slideDown(200);
}).on('mouseout', function(){
    $(this).children('ul').slideUp(200);
});

改进上述代码,

$('.click').on('click', function(){
     $("ul", $(this)).slideDown(200);
}).on('mouseout', function(){
    $("ul", $(this)).slideUp(200);
});

<强>更新

要确保在光标位于元素外部时触发事件,您必须使用mouseleave而不是鼠标

$('.click').on('click', function(){
     $("ul", $(this)).slideDown(200);
}).on('mouseleave', function(e){
        $("ul", $(this)).slideUp(200);
});

Demo

答案 3 :(得分:0)

将mouseout事件的绑定移动到click事件的绑定之外

$(document).ready(function(){

$('。点击ul')。css({display:'none',position:'absolute'});

$( '点击')。点击(函数(){

 $(this).children('ul').slideDown(200);

}) $('。click')。on('mouseout',function(){

$(本)。儿童( 'UL')效果基本show(200)。 })

})