Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击外部时关闭JavaScript菜单_Javascript_Html_Css - Fatal编程技术网

单击外部时关闭JavaScript菜单

单击外部时关闭JavaScript菜单,javascript,html,css,Javascript,Html,Css,我基本上是在用户单击任意位置时尝试关闭“打开”菜单。我是新来的,不知道是什么问题。到目前为止,我正在使用这段代码,这是我的html、css和javaScript。我认为问题在于我的JavaScript 谢谢你的帮助 HTML JavaScript <script> function show_menu(){ var menu = document.getElementById('dropdown_menu'); if(menu.style.display == 'b

我基本上是在用户单击任意位置时尝试关闭“打开”菜单。我是新来的,不知道是什么问题。到目前为止,我正在使用这段代码,这是我的html、css和javaScript。我认为问题在于我的JavaScript

谢谢你的帮助

HTML

JavaScript

<script>
function show_menu(){
    var menu = document.getElementById('dropdown_menu');

    if(menu.style.display == 'block'){
        menu.style.display = 'none';
    }else {
        menu.style.display = 'block';                    
    }
}
function hide_menu(){

    var menu = document.getElementById('dropdown_menu');
    if(menu.style.display == 'none'){
        menu.style.display = 'block';
    }
}
var cl = document.getElementById("body");
cl.addEventListener("click", hide_menu);
</script>

功能显示菜单(){
var menu=document.getElementById(“下拉菜单”);
如果(menu.style.display=='block'){
menu.style.display='none';
}否则{
menu.style.display='block';
}
}
函数隐藏菜单(){
var menu=document.getElementById(“下拉菜单”);
如果(menu.style.display==“无”){
menu.style.display='block';
}
}
var cl=document.getElementById(“主体”);
cl.addEventListener(“单击”,隐藏菜单);
确保单击不在div for菜单上,这会对您有所帮助

HTML代码

<div class="menu-button" style="width:23px; cursor: pointer;" ><span id="button" style="color:#b0acac;">Show Menu</span></div>
<div id="dropdown_menu" class="hidden_menu">
    <ul id="container">
        <li>Settings<br></li>
        <li>Log Out</li>
    </ul>           
</div>
JavaScript代码

var dropMenu = document.getElementById('dropdown_menu'),
    menuButton = document.getElementById('button'),
    dropUL = document.getElementById('container').childNodes;

function hide_menu(evt){

    evt = evt || window.event;                        // get window.event if evt is falsy (IE)
    var targetElement = evt.target || evt.srcElement; // get srcElement if target is falsy (IE)

    if(targetElement === menuButton || targetElement.nodeName.toLowerCase() === 'li' ){
        dropMenu.style.display = 'block'
    } else {
        dropMenu.style.display = 'none'
    }
}

// For legacy broser(IE8 and IE7) support
function addEvent(el, type, fn){
    if(typeof addEventListener !== 'undefined'){
        el.addEventListener(type, fn, false)
    } else {
        el.attachEvent('on'+type, fn);
    }
}

addEvent(document, 'click', hide_menu);

如果您想要纯js:

document.addEventListener('click', function(e){
console.log(e.target.id)
    if(e.target.id!=="dropdown_menu")
    console.log("document Clicked");
});
它与上述函数相同,但是用javascript编写的

function hide_menu(e){

    var menu = document.getElementById('dropdown_menu');

    if(e.target != menu) {
        menu.style.display = 'none';
    }
}

document.body.addEventListener("click", hide_menu);

在jsfiddle中添加代码您需要做的是将事件侦听器绑定到HTML
body
元素,关闭此事件的菜单,然后保持cl事件侦听器的原样。他在示例中没有使用jQuery(或将其标记为jQuery问题),那么您为什么要使用jQuery提供答案?
.hidden_menu { display:none;}
var dropMenu = document.getElementById('dropdown_menu'),
    menuButton = document.getElementById('button'),
    dropUL = document.getElementById('container').childNodes;

function hide_menu(evt){

    evt = evt || window.event;                        // get window.event if evt is falsy (IE)
    var targetElement = evt.target || evt.srcElement; // get srcElement if target is falsy (IE)

    if(targetElement === menuButton || targetElement.nodeName.toLowerCase() === 'li' ){
        dropMenu.style.display = 'block'
    } else {
        dropMenu.style.display = 'none'
    }
}

// For legacy broser(IE8 and IE7) support
function addEvent(el, type, fn){
    if(typeof addEventListener !== 'undefined'){
        el.addEventListener(type, fn, false)
    } else {
        el.attachEvent('on'+type, fn);
    }
}

addEvent(document, 'click', hide_menu);
document.addEventListener('click', function(e){
console.log(e.target.id)
    if(e.target.id!=="dropdown_menu")
    console.log("document Clicked");
});
function hide_menu(e){

    var menu = document.getElementById('dropdown_menu');

    if(e.target != menu) {
        menu.style.display = 'none';
    }
}

document.body.addEventListener("click", hide_menu);