0

我有以下 html 来创建下拉菜单:

<li class="user-section user-section-original">
    <img class="user-image" src="{{ user.get_profile.avatar_small.url }}" height="30" width="30"/>
    <span class="name">{{ user.first_name }} {{ user.last_name.0}}.</span>
</li>
<li class="user-section-dropdown user-section hidden">
    <img class="user-image" src="{{ user.get_profile.avatar_small.url }}" height="30" width="30"/>
    <span class="name">{{ user.first_name }} {{ user.last_name.0}}.</span>
    <a href="{% url logout %}" class="dropdown-item">Log Out</a>
</li>

当用户单击菜单时,它将下拉,然后如果用户再次单击它(或单击下拉菜单之外的任何位置),它将再次隐藏。

这是我到目前为止所拥有的:

$("#header li.user-section").click(function() {
    $("#header .user-section-dropdown").css('display', 'block');
    $("#header .user-section-original").css('display', 'none');
});

这会在单击帐户部分时显示帐户下拉菜单。当再次单击它或单击页面上的另一个部分时,我如何使它也消失?

4

5 回答 5

1

我认为最简单的方法是切换一个类而不是直接应用样式。

$("#header li.user-section").click(function() {
    $("#header .user-section-original").toggleClass("hidden");
});

然后在你的css中创建一个非语义类,比如

.hidden { display:none; }

要让它在您单击其他任何地方时消失,请尝试:

$(​window).click(function(e){
    var $target = $("#header .user-section-original"); 
    if( $target.hasClass("hidden");
        $target.removeClass("hidden");
})​
于 2012-07-01T13:06:48.027 回答
0

很简单,只需在你的菜单上使用 stopPropagation,然后给'document'点击事件'removeClass'方法;
提示:为了将整个身体向左/向右移动,您可以将“body”元素与您的菜单一起移动;我刚刚应用了这个方法。花了我一天!一天。

$('.button').bind('click', function(e) {
    e.stopPropagation();
    $('.menu').toggleClass('slide');
});


// slide out when click other parts of current page

$(document).click(function(){
    $('.menu').removeClass('slide-in');
});
于 2013-11-12T09:15:54.003 回答
0

I know the correct answer has been given, but I'd like to share this Plugin with you: http://benalman.com/projects/jquery-outside-events-plugin/

It's a simple plugin which binds on clicks outside an element. Within this bind-function you simply check if your element is visible or hidden. It's visible, hide it.

于 2012-07-01T13:47:23.420 回答
0

您只需将单击侦听器添加到整个文档并隐藏下拉列表(如果显示)。

$(document).click(function() {
    if($("#header .user-section-dropdown").css('display') == 'block') {
        $("#header .user-section-dropdown").css('display', 'none');
        $("#header .user-section-original").css('display', 'block');
    }
});

此外,您需要修改原始函数以处理这两种情况:

$("#header li.user-section").click(function(e) {
    if($("#header .user-section-dropdown").css('display') == 'none') {
        $("#header .user-section-dropdown").css('display', 'block');
        $("#header .user-section-original").css('display', 'none');
        e.stopPropagation()
    }
    else {
        $("#header .user-section-dropdown").css('display', 'none');
        $("#header .user-section-original").css('display', 'block');
    }
});

e.stopPropagation() 用于不让文档点击处理程序被调用。

于 2012-07-01T12:55:47.203 回答
0

在点击功能上,您可以添加以下代码

$('li[class$="dropdown"]').css('display', 'none')

这将设置所有以 dorpdown 结尾的 li 元素,display:none然后您可以显示指定的下拉菜单display:block。最后你会有类似的东西

$(".specificliclass").click(function(){
$('li[class$="dropdown"]').css('display', 'none');
$('.specificliclass').css('display', 'block')

});
于 2012-07-01T13:11:31.367 回答