【问题标题】:someting like submenu on input click and close it on losing focus类似于输入点击的子菜单并在失去焦点时关闭它
【发布时间】:2015-10-22 22:49:48
【问题描述】:

我正在尝试在输入单击时执行子菜单之类的操作,并在使用 jQuery 失去焦点时将其关闭。 只能像这样使用 mouseup 完成:

$(document).mouseup(function (e){

   var container = $(".container");

   if (!container.is(e.target)
       && container.has(e.target).length === 0
       && !$(".input").is(e.target))
   {
       $('.submenu').removeClass('submenu');
   }
});

这是我的结果: http://jsfiddle.net/Lwfhbdmp/8/

这工作正常,但我认为它太复杂了,也许有一个更简单的解决方案? 请帮忙。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    jsFiddle demo

    更清洁的解决方案:

    $(function(){
    
        var $submenu,
            contHov = 1,
            $container = $('.container').hover(function(){ contHov^=1; }); // Tog flag on hover
    
        $(document).on('mouseup keyup', function( e ){
            if(contHov||e.which==27) $submenu.removeClass("submenu");
        });
    
        $(".input").on("click", function(e){
            $submenu = $(this).closest("div").toggleClass('submenu');
        });
    
        // That's it. From now on, whenever you desire to
        // reference to the currently active 'submenu'
        // simply use the $submenu variable:
    
        $(".btn-inside").on("click", function(){
            alert("Clicked");
            $submenu.removeClass("submenu");
        });
    
    });
    

    ...您甚至可以使用 ESC 关闭$submenu

    How to close-hide DIV clicking outside of it (but not inside)

    【讨论】:

    • 是的,它可以工作,但在控制台中我收到一个错误:“未捕获的类型错误:无法读取未定义的属性 'removeClass'”
    • 另一个问题是,为什么没有使用 $container 变量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多