2012-06-06 114 views
3

我有一個div,當頁面加載時設置爲display:none;JQuery if .is(':visible')語句不起作用

$(".field-group-format-toggler").click(function() 
{ 
$(".field-group-format-wrapper").css({'display':'block'}); 
}); 

一旦它打開,我希望用戶能夠關閉它,所以我用。是(「:可見」)的嘗試:函數,然後包裝,我可以用這個簡單的代碼打開它我在原來的代碼,如果statment但這次使用display:none;

if($('.field-group-format-wrapper').is(':visible')){ 

    $(".field-group-format-toggler").click(function() 
    { 
    $(".field-group-format-wrapper").css({'display':'none'}); 
}); 

} 

這似乎並沒有工作,雖然,我沒有得到任何語法錯誤,我知道的。

我也試過這樣:

if ($('.field-group-format-wrapper').is(':visible')) 
$(".field-group-format-toggler").click(function() { 
$(".field-group-format-wrapper").css({'display':'none'}); 
}); 

...但是,這也不能工作。

回答

5

您可以只使用toggle功能:

$(".field-group-format-toggler").click(function() 
{ 
    $(".field-group-format-wrapper").toggle(); 
}); 

這將顯示'.field-group-format-wrapper'元素;如果當前隱藏,隱藏他們,如果他們是當前可見。

僅供參考您的代碼片段在您的問題不起作用的原因是因爲您只檢查dom準備好的元素的可見性,而不是每次點擊 - 所以顯示元素的事件處理程序永遠不會連接。

+0

完美,謝謝,這真的減少了我的雜亂代碼!我會接受,但只是有一個消息,我需要等待11分鐘。 –

1

我想你的功能只在頁面加載時被調用,此時所有的div都被隱藏。

爲什麼不檢查點擊事件處理程序中的可見性?

$('.field-group-format-toggler').click(function(){ 
    var $wrapper = $('.field-group-format-wrapper'); //Maybe $(this).parent()? 
    if($wrapper.is(':visible')) 
    $wrapper.hide(); 
    else 
    $wrapper.show(); 
1

如前所述,您可以使用toggle函數來實現您想要的功能。

要添加一些額外的信息,當您像附加事件一樣附加事件時,實際上是使用訂閱模型。

註冊一個事件將其放入訂閱該處理程序的事件隊列中。在這種情況下,當添加第二個事件來更改CSS時,您將添加一個事件,而不是覆蓋第一個事件。

雖然事情並沒有真正引起你的問題,但值得注意。