2013-05-14 3 views
1

페이지로드시 레이블이 표시되지 않지만 사용자가 확인란을 클릭하면 레이블이 표시됩니다. 이 작은 코드 샘플은 문제를 설명하기위한 샘플 일뿐입니다. 라벨의 Visible 속성이 false로 설정된 경우 코드는 항상 자바 스크립트에서 객체 참조 예외를 반환합니다. 해당 행을 주석 처리하면 객체 참조 예외없이 올바르게 실행되지만 레이블은 페이지로드시 숨겨져 야합니다. 이 응용 프로그램은 왜 클라이언트 ID를 javascript Toggle 함수에 전달했는지에 대한 마스터 페이지를 사용합니다.페이지로드를 통해 숨겨진 레이블이 표시되지 않습니다.

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 /> 

Internet Explorer에서 개체 참조 오류가 발생하지 않도록 어떻게 Page_Load에서 해당 레이블을 숨길 수 있습니까?

감사합니다 ...

+0

CSS 사용을 고려하면 많은 문제를 해결하는 데 도움이됩니다. – daniel

+0

또한 jQuery를 사용하는 것을 고려해보십시오. 여기에 제가 생각한 것 중 가장 작은 예제를 작성했습니다. 매우 명확하게하려고했습니다. http://jsfiddle.net/Hv2LH/1/ – daniel

+0

jQuery for 이 조금 과잉 될 것입니다 IMHO –

답변

5
당신은 즉 (null 참조를 얻을 이유를 false로 설정하면 HTML 렌더링하지 않는 Visible 속성, 그건

, ASP.NET의 Visibledisplay CSS 속성과는 아무 상관 없습니다 - 요소가 HTML 코드에서 렌더링되는지 여부를 실제로 전환합니다. 대신 display: none을 정의하는 페이지로드시 CSS 클래스를 할당 한 다음 자바 스크립트로 클릭시 해당 클래스를 제거하십시오.

+0

오늘 투표 제한에 도달하지 못했다면 나는 이것을 투표 할 것입니다. – Renan

+0

니스 깨끗한 대답은 당신을 위해 그것을 했어 @Renan – Kiarash

+0

지금 돌아 왔고 upvoted. – Renan

관련 문제