2013-05-14 93 views
1

預期的效果是,在頁面加載時,標籤不顯示,但是當用戶單擊複選框時,標籤顯示。這個小代碼示例只是一個示例來說明問題。當標籤的Visible屬性設置爲false時,代碼將始終從javascript返回對象引用異常。如果該行被註釋掉,它將正確執行而不會有對象引用異常,但標籤應該在加載頁面時隱藏。此應用程序確實使用母版頁,這就是爲什麼要將ClientID傳遞給JavaScript切換功能。當通過頁面加載隱藏標籤時,標籤不會顯示

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.chkSelect.Attributes.Add("onClick", "Toggle('" + this.lblAdd.ClientID + "', '" + this.chkSelect.ClientID + "')"); 
    this.lblAdd.Visible = false; 
} 

<script type="text/javascript"> 
    function Toggle(lblAdd, chk) { 
     var ctrlAdd = document.getElementById(lblAdd); 
     var ctrlChk = document.getElementById(chk); 

     if (ctrlChk.checked == true) { 
      ctrlAdd.style.display = 'inline'; 
     } 
     else { 
      ctrlAdd.style.display = 'none'; 
     } 
    } 
</script> 


    <asp:Label ID="lblAdd" runat="server" Text="Add" Font-Size="8pt" ForeColor="Blue"> </asp:Label> 
    <asp:CheckBox ID="chkSelect" runat="server" Text="Check Box1" /><br /> 

如何隱藏Page_Load中的該標籤,以免從Internet Explorer中獲取對象引用錯誤?

謝謝...

+0

考慮使用CSS,將有助於您的很多麻煩。 – daniel

+0

另外考慮使用jQuery,我在這裏寫了一個小例子,你試圖做什麼(我想),試圖使其非常清楚:http://jsfiddle.net/Hv2LH/1/ – daniel

+0

jQuery只是爲了這會有點矯枉過正恕我直言 –

回答

5

Visible屬性,如果設置爲false,不渲染HTML,這就是爲什麼你會得到一個空引用(換句話說,ASP.NET的Visible是無關的display CSS屬性 - 它實際上是切換一個元素是否在HTML代碼中呈現或不)。相反,在頁面加載時指定一個CSS類,定義display: none,然後使用javascript刪除該類點擊

+0

如果我今天還沒有達到我的投票限制,我會投這個票。 – Renan

+0

尼斯和乾淨的答案,所以你呢@Renan – Kiarash

+0

回來現在和upvoted。 – Renan