2013-06-25 21 views
-6

我試圖檢測一個元素是否可見,然後給它分配一個函數:jQuery如果元素是可見的,我做錯了什麼?

在按鈕顯示菜單按鈕後,我想單擊任何位置並隱藏meny並重新顯示按鈕。

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')方法爲好。

我讀的地方,該僞選擇:visible不與職能的工作,但這裏的例子,當我的任意位置單擊要麼不隱藏元素。

我做錯了什麼?

http://jsfiddle.net/Kyle_Sevenoaks/yuAhb/

+0

有什麼不對?在你的小提琴中,按鈕消失,菜單顯示(我正在使用Chrome)。應該發生什麼呢? – qJake

+2

你可以嘗試解釋你在這裏想要做什麼嗎? – Dogbert

+0

然後,您需要在其他內嵌入一個點擊處理程序。 – qJake

回答

1

你並不需要一個if可言;並且您沒有像@SLaks的回答中所描述的那樣正確使用它。 爲什麼不將函數分配給不可見元素?我想我們應該做的,所以我覺得這是你想要什麼:http://jsfiddle.net/balintbako/yuAhb/1/

$('button.nav-mobile-switch').click(function() { 
    $(this).hide(); 
    $('ul.site-nav.actual-navigation').show(); 
    return false; 
}); 

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


$('ul.site-nav.actual-navigation').click(function (e) { 
    e.stopPropagation(); 
    return false; 
}); 
+0

這正是我在開始使用'if'之前所嘗試的。現在,它的工作,是嗎? :D謝謝。 – Kyle

+1

自愈代碼可能,我也已經添加了一個'返回false;'的第一個處理程序;) –

-1

您可以使用可視選擇,但功能不與知名度attribute.:-

$('element:visible') 

工作,所以,你可以試試這個。刪除if條件並使用此: -

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

它會隱藏菜單並顯示按鈕。

看到這個fiddle

+1

你甚至讀過這個問題嗎? – Kyle

+0

@凱爾好的。讓我糾正它。 –

+0

查看我更新的答案。 –

5

你只是在檢查時,可見第一次加載頁面。
當菜單實際可見時,Nothing再次運行該代碼。

相反,你馬上添加處理,但要沒有做任何事情,如果該元素是不可見的。
或者,當你顯示元素,你可以只添加處理程序,而當你把它隱藏刪除它。

0

$('ul.site-nav.actual-navigation').live('click', function(e) { 
    if ($(e.target).css('display') == 'block') { 
    //code 
    } 
}); 
+1

'.live'被棄用的jQuery 1.7。改用'.on'。 – Nix