【问题标题】:document.onclick close but keep open when menu is clickeddocument.onclick 关闭但在单击菜单时保持打开状态
【发布时间】:2011-12-29 00:23:07
【问题描述】:

好的,我有这个下拉菜单脚本。当所有点击都发生在菜单本身时,它工作正常,但是当我点击菜单时,下拉菜单不会关闭。如果用户单击屏幕上不是实际菜单的某个位置,我希望菜单关闭。

我已尝试添加代码:

document.onclick = ddMenu_close;

但是这使得菜单永远不会打开,因为它通过函数调用“打开”,然后立即关闭它,因为它随后调用 onclick ddMenu_close。我的脚本如下:

<script type="text/javascript">
  function ddMenu() {
    var timeout    = 500;
    var closetimer = 0;
    var ddmenuitem = 0;

    function ddMenu_open(e)
    {
       ddMenu_close();
       var submenu = $(this).find('ul');
        if(submenu){
            ddmenuitem = submenu.css('visibility', 'visible');

        }

    }

    function ddMenu_close()
    {  if(ddmenuitem) ddmenuitem.css('visibility', 'hidden'); }

    function ddMenu_timer()
    { closetimer = window.setTimeout(ddMenu_close, timeout); }

    function ddMenu_canceltimer()
    {  if(closetimer)
       {  window.clearTimeout(closetimer);
          closetimer = null;}}

    $(document).ready(function()
    {  $('#ddMenu > li').bind('click', ddMenu_open);
       $('#ddMenu li ul').bind('click', ddMenu_timer);


    });


    }
    </script>

所以我需要在此脚本中添加一些内容,当单击文档或窗口时将关闭下拉菜单,但不会干扰单击菜单或下拉菜单。感谢您的帮助。

【问题讨论】:

    标签: javascript jquery function


    【解决方案1】:

    在ddMenu_open()中为$(document)绑定点击事件触发ddMenu_close()。 在ddMenu_close()中取消$(document)的点击事件。

    这是一个例子:

    http://jsfiddle.net/bEPvP/

    【讨论】:

    • 这与我正在寻找的非常接近。只要我不向“il”添加实际链接,它就可以正常工作。一旦我将实际的“a”链接添加到“il”,这些链接就不起作用了。我认为这是由于返回错误。你能检查一下jsfiddle,看看你是否可以获得一个实际的链接来工作。现在你有没有链接的 ul/il。谢谢。
    • 请将return false;改为e.stopPropagation();http://jsfiddle.net/bEPvP/4/ Jsfiddle不能使用链接跳转,请将示例放到本地操作
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多