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 - 将 javascript 变量传递给 jSTL 标签

javascript - 将 jquery 数据发送到 struts Action

javascript - JavaScript中的Monad

javascript - Unicode 字符在变量名中有效吗?

javascript - Phantomjs 死于高内存消耗

javascript - 两个签名添加不起作用

javascript - 如何使用 MVC razor 语法将行动态添加到 html 表中

javascript - 我可以在 Fabric.js 中创建更复杂的形状吗?

javascript - 捕获 'Page Down'/'Page Up' 关键事件的问题

javascript - 如果 jQuery 的核心是由 JavaScript 语法组成的,为什么要明确地为其添加浏览器支持呢?