在空白处点击,实现隐藏div(下拉菜单或其它弹框)的方法

        一个小需求的实现,有时候我们点击网站页面的一个下拉菜单按钮,可能要再次点击那个按钮才能使下拉菜单消失,这里要实现的需求是在其他地方(除下拉菜单和按钮以外的地方)点击也要使下拉菜单消失,这样做可以提高用户体验度。

        这里是实现的一个方案,当然方案很多,这里只介绍我用的一种。我们知道前端静态页面的实现最基本的就是DOM树,我们的方案也是基于查询DOM节点的。下拉菜单出现后,我们再次点击的时候,首先获取当前点击元素,然后依次为起点向树根查找,查找过程中若遇到当前下拉菜单节点或者当前按钮节点则停止查找,因为此时点击的为下拉菜单或按钮的子节点,我们不做任何操作,若查找过程中没有遇到当前下拉菜单节点或者当前按钮节点则调用隐藏下拉菜单的程序。下面上程序看一下就一目了然了。


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>点击实验</title>
<script  type="text/javascript"   src="js/jquery-2.1.1.js"></script>
</head>
<body>
  <table>
    <tr>
      <td id="first" οnclick="a();"> 首页      </td>  
      <td> 内容    </td> 
      <td> 技术支持 </td> 
      <td> 联系我们</td>
    </tr>
  </table>

  <div id="phone" value="divm"  >
     <table>
       <tr> 
           <td> 低端  </td>
       </tr>
       
       <tr> 
           <td> 中端  </td>
       </tr>
       
       <tr> 
           <td> 高端  </td>
       </tr>
     </table>
  </div>
 
  <script type="text/javascript">

    $(function b(){
    	$("#phone").hide();
    }); 
  
    function a(){
      var mDiv=$("#phone").attr("value");
      if($("#phone").attr("value")=="divm"){
    	  $("#phone").show();
    	  $("#phone").attr("value","divm2");
      }else{
    	  $("#phone").hide();
    	  $("#phone").attr("value","divm");
      }
       
    }

    $(document).bind("click",function(e){
    	var target  = $(e.target);    //e.target获取触发事件的元素
    	
    	/**以target为起点向上查找父(祖)元素,若父(祖)元素中包含#phone,#first中一个就不执行if中语句,即长度不为0
    	 **.closest()沿 DOM 树向上遍历(以数组形式入参),直到找到已应用选择器的一个匹配为止,返回包含零个或一个元素的 jQuery 对象。
    	 **/
    	if(target.closest("#phone,#first").length == 0){
    	//进入if则表明点击的不是#phone,#first元素中的一个
    		$("#phone").hide();
    	    $("#phone").attr("value","divm");
    	};

    	e.stopPropagation();
    })

  </script>
</body>
</html>
        这里页面写的比较LOW,只为测试使用。另外程序中引入了jquery框架,要自己导入jquery文件包。该程序简单的实现了所述需求,当然实现该需求的方案很多,若有其它方案或建议的同学可留言交流。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值