1

スタックオーバーフローで見つけたドロップダウンメニューのコードを処理しています:http://jsfiddle.net/jhoffm34/VbtuC/

クリックすると展開するjqueryドロップダウンメニューがあります。document.onmousedownを使用して、[カテゴリ]をもう一度クリックしたときにメニューを閉じようとしていますが、すぐにメニューを再度開いています。誰かがこれを修正する方法を知っていますか?

4

1 に答える 1

0

作業デモ
http://jsfiddle.net/RguMu/showhttp://jsfiddle.net/RguMu/http://jsfiddle.net/UK9Qt/-
カテゴリがクリックされた場合のみ表示と非
表示

したがって、2回目のクリックで、メニューは閉じられます。

使用するis(':visible')

もう1つの提案は、それほど多くのプロパティは必要ないということです。ただやっshowhide、残り、あなたはあなたの要件をよりよく知っています。

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;
于 2012-05-01T04:14:40.103 に答える