jQuery如果元素可见,我做错了什么?

jQuery如果元素可见,我做错了什么?,jquery,html,navigation,Jquery,Html,Navigation,我试图检测某个元素是否可见,然后为其分配一个函数: 菜单按钮与按钮一起显示后,我想单击任意位置并隐藏菜单并重新显示按钮 if ($('ul.site-nav.actual-navigation').css('display') == 'block') { $(document).click(function() { $('ul.site-nav.actual-navigation').hide(); $('button.nav-mobile-switch'

我试图检测某个元素是否可见,然后为其分配一个函数:

菜单按钮与按钮一起显示后,我想单击任意位置并隐藏菜单并重新显示按钮

if ($('ul.site-nav.actual-navigation').css('display') == 'block') {
    $(document).click(function() {
        $('ul.site-nav.actual-navigation').hide();
        $('button.nav-mobile-switch').show();
    });

}
我也尝试了$'element:visible'和$'element'.is':visible'方法

我在某个地方读到psuedo选择器:visible不适用于函数,但这里的示例在我单击任意位置时也不会隐藏元素

我做错了什么


您可以使用visible选择器,但函数不能与visibility属性一起使用:-

$('element:visible')
所以你可以试试这个。移除if条件并使用此选项:-

$(document).click(function () {
     $('ul.site-nav.actual-navigation').hide();
     $('button.nav-mobile-switch').show();
 });
它将隐藏菜单并显示按钮

if ($('ul.site-nav.actual-navigation').css('display') == 'block') {
    $(document).click(function() {
        $('ul.site-nav.actual-navigation').hide();
        $('button.nav-mobile-switch').show();
    });

}

请参见此

仅在页面首次加载时检查可见性。 当菜单实际可见时,不会再次运行该代码

相反,您可以立即添加处理程序,但如果元素不可见,则使其不执行任何操作。 或者,您只能在显示元素时添加处理程序,而在隐藏元素时将其删除。

您根本不需要它;你没有按照@SLaks的回答正确使用它。 为什么不将函数分配给一个不可见的元素?我想我们应该这样做,所以我想这就是你想要的:


发生了什么?在你的小提琴中,按钮消失,菜单显示我正在使用Chrome。应该怎么办?你能解释一下你想在这里做什么吗?然后你需要在另一个点击处理程序中嵌入一个点击处理程序。这正是我开始使用if之前尝试过的。现在它起作用了,是吗可能是自愈代码,我还添加了一个返回false;到第一个处理程序;。从jQuery 1.7开始,live就不推荐使用。改为使用.on。
$('ul.site-nav.actual-navigation').live('click', function(e) {
  if ($(e.target).css('display') == 'block') {
    //code
  }
});