鼠标点击超链接后显示下拉菜单,点击空白处关闭下拉菜单

鼠标点击超链接后显示下拉菜单,点击空白处关闭下拉菜单

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    <style>
        * { margin: 0; padding: 0;b}
        li {
            list-style: none;
        }
        div {
            position: relative;
            margin: auto;
            padding-left: 15px;
            width: 400px;
            height: 200px;
            border: 1px solid #3d3d3d;
        }
        ul {
            position: absolute;
            display: none;
            left: 70px;
            top: 10px;
            width: 100px;
            border: 1px solid #3d3d3d;
        }
        #a {
            display: inline-block;
        }
    </style>

    <script>
        window.onload = function () {
          let oUl = document.getElementById('ul');
          let oA = document.getElementById('a');

          oA.onclick = function (ev) {
              let oEvent = ev || event;
            oUl.style.display = 'block';
            oEvent.cancelBubble = true;
          };

          document.onclick = function () {
            oUl.style.display = 'none';
          };
        };
    </script>
</head>
<body>
<div>
    <a id="a" href="javascript:;">超链接</a>
    <ul id="ul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</div>
</body>
</html>

点击超链接显示下拉菜单,设置超链接的点击事件即可。

主要是点击空白地方隐藏,如果直接 document.onlick = function() {},此时点击超链接会发现菜单没有显示出来

这里就涉及到了事件冒泡,详情自己了解

解决这个问题就是 阻止事件冒泡 cancelBubble = true

给document绑定点击事件吧,然后判断点击目标

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#ahref {
				display: block;
			}
			#ulist {
				display: none;
			}
			#ulist>li{
				width: 200px;
				height: 20px;
				border: 1px saddlebrown solid;
			}
		</style>
	</head>
	<body>		
		<a id="ahref" href="#" onclick="showUl()"> 超链接 </a>
		<ul id="ulist">
			<li></li>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>
	
		<script type="text/javascript">
			let domUl = document.getElementById('ulist')
			function showUl() {
				domUl.style.display = 'inline-block';
			}
			document.addEventListener('click', function(e){
				e = e || event;
				if (e.target.id != 'ahref' && e.path.indexOf(domUl) == -1) {
					domUl.style.display = 'none';
				}
			})
		</script>
	</body>
</html>