【问题标题】:How do I write 'if not clicked' or 'if clicked outside element', using Jquery?如何使用 Jquery 编写“如果未单击”或“如果单击外部元素”?
【发布时间】:2011-04-06 05:07:07
【问题描述】:

我有点纠结于如何阻止我的菜单执行fadeOut() 函数。当我单击菜单上的主链接以打开子菜单时,它就会淡出。以下是代码目前的样子:

    $('a.main-menu-item').click(function(){

    if($('.rtmenu:visible')){

        $('.rtmenu').click(function(e) { e.stopPropagation(); });

        $(document).click(function() {
            $('.rtmenu').fadeOut(200);
        });
    }
})

谁能告诉我如何在写有“文档”的地方写下“如果未点击 a.main-menu-item”?

非常感谢


找到解决方案!

$('.rtmenu').click(function(e) { e.stopPropagation(); });
$('.rtmenu').mouseout(function(){ 
     $(document).one('click',function() { $('.rtmenu').fadeOut(200); }); 
 })

【问题讨论】:

标签: javascript jquery


【解决方案1】:

使用blur 事件来处理失去焦点。 This 也可能有帮助。

【讨论】:

    【解决方案2】:

    看看 Ben Alman 的 "outside events" plugin。它允许您定义一系列事件,而不仅仅是单击事件。有了它,您的代码将如下所示:

    $('.rtmenu').bind('clickoutside', function() {
        $(this).fadeOut(200);
    });
    

    顺便说一句,您不应该在菜单的单击事件中设置绑定,这将在每次单击菜单选项时附加另一个处理程序。您的代码应替换为:

    $('a.main-menu-item').click(function(){
        // Show menu item
    });
    $('.rtmenu').bind('clickoutside', function() {
        $(this).fadeOut(200);
    });
    

    【讨论】:

    • @Nasir:那么您可能没有正确使用它。我在帖子中添加了一个示例。
    • 是的,请告诉我...我正在尝试与 ASP Classic 集成...fippin 笑话。无法更改我现有代码中的“文档”吗?
    • @Nasir:if ($('.rtmenu:visible')) 将始终评估为 true,因为它返回一个对象,当转换为布尔值时,该对象为 true。就像我在回答中所说的那样,您不应该在 if 语句或另一个事件的处理程序中定义事件。
    • 找到解决方案! -------------------------------------------------- -------------------------------------------------- ------------------------- $('.rtmenu').click(function(e) { e.stopPropagation(); }); $('.rtmenu').mouseout(function(){ $(document).one('click',function() { $('.rtmenu').fadeOut(200); }); })
    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多