Javascript 第二次单击时关闭水平下拉菜单

Javascript 第二次单击时关闭水平下拉菜单,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在为我在堆栈溢出上找到的下拉菜单编写一些代码: 我有一个jquery下拉菜单,它在单击时展开。我试图使用document.onmousedown在第二次单击“Categories”时关闭菜单,但它只是立即重新打开菜单。有人知道如何解决这个问题吗?工作演示 -仅当单击“类别”时显示和隐藏 因此,再次单击后,您的菜单将立即关闭: 使用is(':visible') 另一个建议是,你不需要那么多的财产。只需执行显示和隐藏,其余的您就可以更好地了解您的需求 jQuery代码 if(submenu.

我正在为我在堆栈溢出上找到的下拉菜单编写一些代码:


我有一个jquery下拉菜单,它在单击时展开。我试图使用document.onmousedown在第二次单击“Categories”时关闭菜单,但它只是立即重新打开菜单。有人知道如何解决这个问题吗?

工作演示


-仅当单击“类别”时显示和隐藏

因此,再次单击后,您的菜单将立即关闭:

使用
is(':visible')

另一个建议是,你不需要那么多的财产。只需执行
显示
隐藏
,其余的您就可以更好地了解您的需求

jQuery代码

if(submenu.is(':visible')){
    submenu.hide();
    return false;
}
var timeout = 999999;
var closetimer = 0;
var ddmenuitem = 0;

function jsddm_open(event) {
    jsddm_canceltimer();
    jsddm_close();
    var submenu = $(this).find('ul');

    if(submenu.is(':visible')){
        submenu.hide();
        return false;
    }

    if (submenu) {
        ddmenuitem = submenu.css('visibility', 'visible');
        ddmenuitem = submenu.css('position', 'relative');
        submenu.show();
        return false;
    }

    return true;
}

function jsddm_close() {
    if (ddmenuitem) ddmenuitem.css('visibility', 'hidden');
    if (ddmenuitem) ddmenuitem.css('position', 'fixed');
}

function jsddm_timer() {
    closetimer = window.setTimeout(jsddm_close, timeout);
}

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

$(document).ready(function() {
    $('#jsddm li').bind('click', jsddm_open);
    $('#jsddm > li').bind('mouseout', jsddm_timer);
    $('#jsddm > li').bind('mouseover', jsddm_canceltimer);
    $('#jsddm li').find('ul').hide();

});

document.onmousedown = jsddm_close;
完整代码

if(submenu.is(':visible')){
    submenu.hide();
    return false;
}
var timeout = 999999;
var closetimer = 0;
var ddmenuitem = 0;

function jsddm_open(event) {
    jsddm_canceltimer();
    jsddm_close();
    var submenu = $(this).find('ul');

    if(submenu.is(':visible')){
        submenu.hide();
        return false;
    }

    if (submenu) {
        ddmenuitem = submenu.css('visibility', 'visible');
        ddmenuitem = submenu.css('position', 'relative');
        submenu.show();
        return false;
    }

    return true;
}

function jsddm_close() {
    if (ddmenuitem) ddmenuitem.css('visibility', 'hidden');
    if (ddmenuitem) ddmenuitem.css('position', 'fixed');
}

function jsddm_timer() {
    closetimer = window.setTimeout(jsddm_close, timeout);
}

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

$(document).ready(function() {
    $('#jsddm li').bind('click', jsddm_open);
    $('#jsddm > li').bind('mouseout', jsddm_timer);
    $('#jsddm > li').bind('mouseover', jsddm_canceltimer);
    $('#jsddm li').find('ul').hide();

});

document.onmousedown = jsddm_close;