焦点丢失时关闭菜单,而不是鼠标输出。 jQuery的

时间:2010-04-25 20:21:33

标签: jquery

我有jQuery在单击其父级时删除菜单,并在它们从菜单中移开时将其解除。我想改变行为,只有当他们点击页面上的其他地方或不同的菜单时它才会被解雇。这可能吗?

jQuery.fn.dropdown = function () {
    return this.each(function () {
        $('.ui-dropdown-list > li > a').click(function () {
            $(this).addClass("ui-dropdown-hover");
        });

        $("ul.ui-dropdown-list > li > a").click(function () {
            $(this).parent().find("ul").show();

            $(this).parent().hover(function () {
            }, function () {
                $(this).parent().find("ul").hide();
                $(this).find('> a').removeClass("ui-dropdown-hover");
            });
        });
    });
};

2 个答案:

答案 0 :(得分:4)

尝试在您的身体上放置一个点击处理程序,它会关闭菜单。除非在其他地方被解雇,否则该事件应该传播到身体。

这样的事情:

$("body").click(function() {
  $(".ui-dropdown-hover").removeClass(".ui-dropdown-hover");
});

答案 1 :(得分:0)

添加@BradBrening的答案:您可能希望在添加处理程序之前等待一段时间,并且还要取消绑定您已注册执行相同操作的任何早期点击处理程序。否则,如果用户再次点击该项目,它将立即消失!

我做了类似下面的事情,其中​​'click.junk'是jquery所谓的事件命名空间:

$( 'body' ).unbind( 'click.junk' );

// ...code to add a DIV with ID my_new_item to the DOM...

$( '#my_new_item' ).fadeIn();
window.setTimeout( function() { 
    $( 'body' ).bind( 'click.junk', 
        function() { $( '#my_new_item' ).fadeOut() } 
    );
}, 200 );

这对我有用! (还有参考:209029