【问题标题】:Using onblur and setTimeout to close a sub menu使用 onblur 和 setTimeout 关闭子菜单
【发布时间】:2014-07-15 01:35:55
【问题描述】:

我想使用 onblur 关闭子菜单。我有它来“隐藏”子菜单,但它就是这样做的。我希望菜单恢复到原来的状态。我还想在菜单上设置一个超时,这样它会在 5-10 秒后关闭。

P.S 我试图为此制作一个 jsfiddle,但它没有起作用。此外,这适用于移动网站。

HTML

<div class="smenu_div"">
    <ul>
      <li>
        <a class="menu-title" href="#" onblur="hidemenu()" onclick="showsub()">Menu</a>
        <ul id='hiddenMenu'>
           <li><a href="/mobile/m.index.html">Home</a></li>
           <li><a href="m.trucks.html">Trucks</a></li>
           <li><a href="m.equipment.hmtl">Equipment</a></li>
         </ul>
        </li>
    </ul>   
</div>

CSS

.smenu_div ul
{

    padding:0px;
    margin-top:5px; 
    margin-right:40px;
    font-family:georgia;
    font-size:70px;
    color:#ffffff;
    list-style:none;
    text-indent:15px;
    text-align:center; 
    width:40%;
    overflow:hidden;
    position: relative;
    display: block;
    float:right;
}

.smenu_div ul li
{

    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    border-radius: 10px;
    background: rgba(0,0,0,0);
    line-height:justified;
    margin-top: 10px;
    position:relative;
}


/* Changed this so that your hidden menu is hidden by default */
.smenu_div li ul
{ 

  z-index: 50;
  display: none;
  position: relative;
  width: 100%;
  background: transparent;
  float:none;
  }

.smenu_div ul li a
{
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    border-radius: 10px;
    text-decoration:none;
    color:#ffffff;
    background: #000000;
    display:block;
    position:relative;
}

/* @new */
.smenu_div ul li a.menu-title
{
    padding-right: 50px;
    background: #000000 url('plus.png') no-repeat right center;
    background-size: 75px 75px;

}


.menu-open .smenu_div ul li a.menu-title
{

   background-image: url('minus.png')
}

JavaScript

 var hidden = true;

    function showsub() {

        document.getElementById('hiddenMenu').style.display = (hidden) ? 'block' : 'none';
        document.body.classList.toggle('menu-open');
        hidden = !hidden;


    };

    function hidemenu() {
        document.getElementById('hiddenMenu').style.display =  'none';
        document.body.classList.toggle('plus');
        hidden = !hidden;
    };

【问题讨论】:

    标签: javascript html css settimeout onblur


    【解决方案1】:

    你的 html 代码有一个错误&lt;div class ="smenu_div""&gt; 有一个太多的引号,所以它破坏了 jsfiddle。

    你几乎拥有它,实际上你在代码中缺少的只是

     setTimeout(hidemenu,10000);
    

    来自showsub。请注意,如果您想阻止它在 10 秒后关闭,如果用户一直按下东西,您将需要一些额外的代码,但如果您可以在用户点击菜单后关闭 10 秒,那么不管它是什么好的。

    here's the fiddle

    【讨论】:

    • 好的。知道了。现在我更新了小提琴,所以你可以看到我想要的正负图像。通过在菜单外单击来使用 onBlur。您可以看到,当它应该回到正时,减号仍然是负号。有没有办法重新加载菜单,而不是隐藏它。 jsfiddle.net/3eBux/2
    • 好的,我明白了。 click 事件正常工作,但使用 setTimeout 您无法删除menu-open。我稍微修改了代码,以便menu-open 的切换尊重您正在尝试做的事情。 (即调用hidemenu 总是删除menu-openshowmenu 基于hidden 切换)see fiddle
    • 太棒了!正是我需要的。谢谢。
    • 在笔记本电脑上效果很好。当我在手机上尝试时,onBlur 不起作用。有触摸屏的解决方法吗?
    • 您可以尝试附加到 onChange。 onBlur 适用于大多数手机,但确实存在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多