javascript - 类似于输入中的子菜单,单击并在失去焦点时将其关闭

标签 javascript jquery

我正在尝试执行类似输入单击子菜单之类的操作,并在使用 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/

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

最佳答案

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)

关于javascript - 类似于输入中的子菜单,单击并在失去焦点时将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33283363/

相关文章:

javascript - 过滤函数中的对象字面量

jquery - 如何通过 jQuery if 语句编辑 CSS 类

javascript - Firebase 云存储集合映射与 forEach

javascript - 为什么一个全局定义的数组在回调函数中将数据推送给它在全局范围内是空的?

javascript - jQuery 选项卡查找定位

javascript - 使单击时单选按钮的焦点不可见,但焦点应在键盘导航上可见

javascript - 根据 Internet 可用性从在线样式表切换到离线样式表

javascript - 带有 jquery Accordion 的 AngularJS ng-table 固定 header

javascript - 使用 TypeScript 创建 JSON 对象

javascript - canvas setDimension() 破坏了图形的拖动功能