0

我目前正在使用以下脚本来操作我的下拉菜单,以便当用户单击菜单项时会出现下拉菜单,并且他们当前可以单击屏幕外的任何位置以使菜单消失,但我想知道 id 如何添加功能到通过再次单击菜单项使下拉菜单消失(同时保留单击项目外部任何位置的选项)。这很难实施吗?

$(document).ready(function() {
    /* for keeping track of what's "open" */
    var activeClass = 'dropdown-active', showingDropdown, showingMenu, showingParent;
    /* hides the current menu */
    var hideMenu = function() {
        if(showingDropdown) {
            showingDropdown.removeClass(activeClass);
            showingMenu.hide();
        }
    };

    /* recurse through dropdown menus */
    $('.dropdown').each(function() {
        /* track elements: menu, parent */
        var dropdown = $(this);
        var menu = dropdown.next('div.dropdown-menu'), parent = dropdown.parent();
        /* function that shows THIS menu */
        var showMenu = function() {
            hideMenu();
            showingDropdown = dropdown.addClass('dropdown-active');
            showingMenu = menu.show();
            showingParent = parent;
        };
        /* function to show menu when clicked */
        dropdown.bind('click',function(e) {
            if(e) e.stopPropagation();
            if(e) e.preventDefault();
            showMenu();
        });
        /* function to show menu when someone tabs to the box */
        dropdown.bind('focus',function() {
            showMenu();
        });
    });

    /* hide when clicked outside */
    $(document.body).bind('click',function(e) {
        if(showingParent) {
            var parentElement = showingParent[0];
            if(!$.contains(parentElement,e.target) || !parentElement == e.target) {
                hideMenu();
            }
        }
    });
});

这是我根据以下答案的尝试:

/* function to show menu when clicked */
dropdown.bind('click',function(e) {
    if (!dropdown.data('open')) {
    dropdown.data'(open', true);
    // open menu
    } else {
    dropdown.data('open', false);
    // close menu
    }

});

虽然我遇到了错误,所以我认为我玩错了或者可能覆盖了一些东西?这只是上面代码的一部分,因为它是我用这个答案编辑的唯一部分。

谢谢

4

1 回答 1

0

您可以做的是使用 jQuery.data() 并有一个名为 open 的变量,例如,根据状态为真或假。所以你可能是这样的。

if (!dropdown.data('open')) {
dropdown.data'(open', true);
// open menu
} else {
dropdown.data('open', false);
// close menu
}
于 2012-04-12T10:22:19.327 回答