jQuery 怎么实现点击页面其他地方隐藏菜单

发布网友 发布时间:2022-04-20 17:07

我来回答

2个回答

热心网友 时间:2022-04-22 15:05

jquery实现点击页面其他地方隐藏指定元素:
在很多效果中,都有这样的功能,当点击页面的其他地方时,能够隐藏一个指定的元素,例如在模拟实现的select下拉菜单效果中,当下拉菜单出现的时候,我们往往希望当点击页面其他地方的时候,能够隐藏下拉条,下面就通过一个实例单独介绍一下如何实现此功能。
代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>点击页面其他地方隐藏div-蚂蚁部落</title>
<style type="text/css">
*{
  margin:0px;
  padding:0px;
}
.main{
  cursor:pointer;
}
.list{
  border:1px solid black;
  display:none;
}
.list li{
  cursor:pointer;
  border:1px solid red;
  list-style:none;
}
#noPopEvent{
  width:100px; 
  height:100px; 
  background-color:blue;
  font-size:12px;
  margin:200px;
  text-align:center;
  line-height:100px;
}
</style>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript"> 
$(document).ready(function(){ 
  $(".main").click(function(e){ 
    $(".list").toggle(); 
    e.stopPropagation();
  })
   
  $(document).click(function(){ 
    $(".list").hide(); 
  }) 
   
  $(".list li").click(function(){ 
    $(".main").text($(this).text()); 
    $(".list").hide(); 
  }) 
  $("#noPopEvent").click(function(e){ 
    e.stopPropagation(); 
  }) 
}); 
</script>
</head>
<body>
<div style="width:200px;margin:20px;">
  <div class="main">蚂蚁部落</div>
  <div class="list">
    <ul>
      <li>div+css教程</li>
      <li>javascript教程</li>
    </ul>
  </div>
</div>
<div id="noPopEvent">点我不行</div>
</body>
</html>

热心网友 时间:2022-04-22 16:23

如果页面里没有其它与document相关的操作,那么上面的代码没问题,也不会出现问题,但不是科学的方法,最科学的方法应该是这样:

$("#btn").click(function(e){     
    e.stopPropagation();//阻止冒泡 
    $("#btncon").toggle();  //切换子菜单的显示或隐藏状态  
    if($("#btncon").is(":visible")){    //判断子菜单是否可见   
        $(document).one("click",function(){     //如果可见就为documnet对象绑定个一次性的单击事件       
            $("#btncon").hide();       
        });
    }
});

要隐藏子菜单的时候,不能直接给documnet对象赋予click事件,因为这样在每次点击页面时,都会执行这个事件,所以科学的方法是用one来赋予一个一次性事件,就行了,这里有在线实例演示:网页链接

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com