简体   繁体   English

在外部单击时显示和隐藏

[英]show and hide when clicked outside

I want to improve this script (ONLY WITH RAW JAVASCRIPT).我想改进这个脚本(仅适用于 RAW JAVASCRIPT)。 It's a classic show / hide script (with onclick and classes).这是一个经典的显示/隐藏脚本(带有 onclick 和类)。 But when i show the div (.mini-list), the only way to hide it it's to click on the previous div ("Show me ya moves").但是,当我显示 div (.mini-list) 时,隐藏它的唯一方法是单击前一个 div(“向我展示你的动作”)。 How to make a event listener that make this : when i click outside .mini-list, it's toogle the div if it's open.如何制作一个事件监听器来做到这一点:当我在 .mini-list 之外点击时,如果它是打开的,它就是 div。 It's like every modal ever : close if we click outside.就像所有的模态一样:如果我们在外面点击就关闭。

I tested so many things, and all failed.我测试了很多东西,都失败了。

 function toogleClass(div, myclass) { var regex = new RegExp('\\\\b' + myclass + '\\\\b'); var hasOne = div.className.match(regex); myclass = myclass.replace(/\\s+/g, ''); if (hasOne) div.className = div.className.replace(regex, ''); else div.className = div.className + myclass; }
 .mini-menu {cursor:pointer;} .mini-show {} .mini-list {display:none} .mini-show .mini-list {display:block}
 <div class="mini-menu " onclick="toogleClass(this, 'mini-show')">Show me ya moves ! <div class="mini-list">Hi !</div> </div>

function hide(e){
    if(e.target.parentElement === null){
      var x = document.getElementsByClassName("mini-menu")[0];
      if(document.getElementsByClassName("mini-show").length>0)
        toogleClass(x, 'mini-show');
      } 
}
document.onclick = hide;

You can attach an event handler to the document and close the div when user clicks outside mini-menu .您可以将事件处理程序附加到文档并在用户单击mini-menu外部时关闭 div。

 function toggleClass() { event.stopPropagation(); let div = document.getElementById('greeting'); if (div.classList.contains('mini-list')) { div.classList.add('mini-show'); div.classList.remove('mini-list'); } else { div.classList.add('mini-list'); div.classList.remove('mini-show'); } } function closeGreeting() { let div = document.getElementById('greeting'); div.classList.add('mini-list'); div.classList.remove('mini-show'); } document.getElementsByClassName('mini-menu')[0].addEventListener('click', toggleClass, false); document.addEventListener('click',closeGreeting);
 .mini-menu {cursor:pointer;} .mini-show {display:block} .mini-list {display:none}
 <div class="mini-menu">Show me ya moves ! <div id='greeting' class="mini-list">Hi !</div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM