javascript - hide dropdown on 'body' 点击产生需要双击再次显示

标签 javascript jquery css jquery-events

我有这个下拉菜单,当一个菜单被点击时,如果有另一个菜单处于事件状态,则这个菜单被停用,然后新的菜单被激活:

$('.idiomas span.current').toggle(function(){
   //alert(true);
   $('.idiomas span.clicked').next('ul').hide();
   $('.idiomas span.clicked').removeClass('clicked');
   $(this).next('ul').fadeIn();
   $(this).addClass('clicked');
 },
 function() {
   $(this).next('ul').hide();
   $('.idiomas span.current:not(.clicked)').show();   
 });

好的,直到这里工作正常,但后来我希望当用户在整个菜单外单击时隐藏菜单;发现点击 body 应该可以按我的需要工作:

 $('body').bind('click', function(e) {
   if($(e.target).closest('.idiomas ul').length == 0) {
     // se ha clickado fuera del menu
     $('.idiomas ul').hide();
     $('.idiomas span.current').removeClass('clicked').show();
     $('.facebook').css('visibility','visible');
   } else {
     // dentro: no hacemos nada.
   }
 });

它确实隐藏了,但我需要在下一个菜单项中单击两次才能使其子菜单可见,

知道为什么吗?

最佳答案

这里有些东西可能会有所帮助。这是它的 JSFiddle:http://jsfiddle.net/aTqP5/

你的问题的基本要点是切换有两种状态,当你点击主体时,元素被隐藏但切换状态仍然是“显示”并且必须去“隐藏”然后回到“显示” "再次点击两次。

$(document).ready(function(){    
    $('.idiomas span.current').click(function(event){
        event.stopPropagation();
        if ( $(this).hasClass('clicked') ) {
            $(this).removeClass('clicked');
            $(this).siblings('ul').hide();
        } else {
            $('.idiomas span.clicked').removeClass('clicked').siblings('ul').hide();
            $(this).addClass('clicked');
            $(this).siblings('ul').fadeIn();
        }
    });

    $('body').click(function(event) {
        event.stopPropagation();
        if ( $('.idiomas span.clicked').length > 0 ) {
            $('.idiomas ul').hide();
            $('.idiomas span.current').removeClass('clicked');
        }
    });
});

关于javascript - hide dropdown on 'body' 点击产生需要双击再次显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642971/

相关文章:

jquery - 即使弹出 jQuery 模式对话框,我的一些网站页面链接仍然有效

html - 100%高度容器通过绝对定位被推出IE视口(viewport)

javascript - 将 +1 附加到电话号码字段值

javascript - Google Sheet 应用程序脚本时间戳条件

javascript - Jquery 获取属性值变化

javascript - JQuery 延迟对象和 ajax 调用

css - 2 个元素之间的边距,其中一个元素的值为 "position: fixed;"

javascript - Jquery 事件无法与 AngularJS 一起正常工作

javascript - Cron Job 在 Cloudwatch Events 中从上午 8 点到下午 4.30 每分钟运行一次

jquery - Ajax调用成功,但未出现在网络面板中