2011-09-19 85 views
0

請幫忙,因爲當我使用clcik並調用Javascript函數來取消隱藏元素時,它會再次隱藏。它需要一秒或更少的時間。當元素在Javascript中可見時,它會切換回隱藏

HTML

<asp:Button ID="btnFromCalOpen" Width = "35" runat="server" Text="&gt;" style="display:none; visibility:hidden;" OnClientClick ="ShowCal()" /> 

的Javascript

function ShowCal() { 

var elem = document.getElementById('MainContent_CalendarFrom'); 

if (elem.visibility = "hidden") { 
    alert("Show"); 
    elem.style.visibility = "visible"; 
    elem.style.display = "inline"; 
} 
else { 
    alert("Hide"); 
    elem.style.visibility = "hidden"; 
    elem.style.display = "none"; 
} 
} 

它當過我的按鈕點擊刷新所有元素的風格屬性,如

請幫

+0

這不是HTML,它是ASP.NET。如果您有客戶端問題,請執行服務器端代碼並​​向我們顯示*輸出*。 – Quentin

回答

2

您有一個您的代碼錯誤/錯誤在這裏

if (elem.visibility = "hidden") { 

你不檢查if,但你把它設置爲隱藏!

爲了避免這種錯誤的嘗試這種方式/技巧在你的代碼

if ("hidden" == elem.visibility) { 
0

兩個主要問題。

  1. elem.visibility不是您的對象的屬性。如果你想看看樣式設置,它將是elem.style.visibility
  2. =====進行比較,而不是=。您正在執行=的分配操作。

試試這個代碼:

function ShowCal() { 

    var elem = document.getElementById('MainContent_CalendarFrom'); 

    if (elem.style.visibility == "hidden") { 
     alert("Show"); 
     elem.style.visibility = "visible"; 
     elem.style.display = "inline"; 
    } 
    else { 
     alert("Hide"); 
     elem.style.visibility = "hidden"; 
     elem.style.display = "none"; 
    } 
} 

僅供參考,沒有必要同時設置style.visibilitystyle.display。如果您要將style.display設置爲「無」,則不需要可見性設置。

你的代碼的簡化版本會是這樣(你可以看到工作here in this jsFiddle):

function ShowCal() { 

    var elem = document.getElementById('MainContent_CalendarFrom'); 

    if (elem.style.display == "none") { 
     elem.style.display = "inline"; 
    } else { 
     elem.style.display = "none"; 
    } 
} 

,並從HTML此標記刪除visibility: hiddendisplay: none是你所需要的。

作爲參考(如果這是可能的話),這是像jQuery或YUI這樣的庫很方便的地方之一。在jQuery中,這只是:

function ShowCal() { 
    $("#MainContent_CalendarFrom").toggle(); 
}