2013-03-17 1 views
0

CheckBox에 따라 asp.TextBox/Input을 활성화/비활성화해야합니다. CheckBox.Checked = true이면 asp.TextBox/Input을 활성화하거나 CheckBox.Checked = false 인 경우 asp.TextBox/Input을 비활성화해야합니다.CheckBox.Checked를 기반으로 asp : TextBox 컨트롤을 활성화/비활성화합니다.

아래 코드는 첫 번째 클릭에서만 작동합니다. 즉, 상자를 선택하면 asp.TextBox/Input을 활성화하지만 asp.TextBox/Input을 선택 취소해도 선택 취소하면됩니다.

또한 기본적으로 asp.TextBox/Input은 Page_Load에서 비활성화됩니다.

//If checked it should enable the input. 
//If unchecked it should disable the input. 
If Port is Required?<label class="checkbox"> 
         <input type="checkbox" id="isportreqinput" name="isportreqinput" runat="server" onclick="fncport(this.form.isportreqinput, this.form.porttxt);" /> 
         <span class="metro-checkbox">Check Me</span> 
        </label> 

//This is the input I need to disable/enable depending on the checkbox 
<input type="text" name="porttxt" id="porttxt" runat="server" disabled="disabled" /> 

    <script type="text/javascript"> 
     function fncport(control, objname) { 

      if (control.checked == true) { 
       objname.disabled = false; 
      } 
      if (control.cheched == false) { 
       objname.disabled = true 
      } 
     } 
    </script> 
+0

흠 ... 이상한. 왜 그게 전부일까요? 'fncport (this.form.isportreqinput, ...)'는 디폴트 ASP.net이 다른 ID를 렌더링하기 때문에 컨트롤을 알지 못한다. –

+0

죄송합니다, 무슨 말씀인지 모르시겠습니까? – jorame

+1

브라우저에서 렌더링 된 HTML 코드를 보면 컨트롤의 ID가'ctl00_ContentPlaceHolder_isportreqinput'처럼 정말 아름답 지 않아야합니다. 그러나'onclick' 핸들러는 원래의 ID로 함수를 호출합니다. 기본 ID 렌더링을 변경하지 않았다면, 이것은 렌더링 된 클라이언트 ID를 얻기 위해'fncport (this.form. <% = isportreqinput.ClientID %>, ...)'이어야합니다. –

답변

0

this.form.isportreqinput은 HTML 내에서 isportreqinput 확인란에 대한 참조를 얻을 수있는 유효한 방법이 아니다. this은 실제로 체크 박스에 대한 참조입니다. 당신이 당신의 기능에있는 확인란 및 입력의 식별자를 전달해야하는 경우

, 텍스트로 그들에 전달하고 또한 document.getElementById()

<label class="checkbox"> 
    <input type="checkbox" id="isportreqinput" name="isportreqinput" runat="server"  
     onclick="fncport('isportreqinput', 'porttxt');" /> 
    <span class="metro-checkbox">Check Me</span> 
</label> 

<input type="text" name="porttxt" id="porttxt" runat="server" disabled="disabled" /> 

사용, 당신은 if 문 두 번째에 checked를 mispelled. if 문도 필요하지 않습니다. 비활성화 된 값을 확인 된 값의 반대로 설정하면됩니다.

function fncport(controlid, objnameid) { 
     var control = document.getElementById(controlid); 
     var objname = document.getElementById(objnameid); 

     objname.disabled = !control.checked; 
    } 
+0

또한 컨트롤이 runat = "server"로 실행되기 때문에 ID가 변경되고 ClientID – Aristos

+0

@Aristos로 전화해야합니다. 예, 죄송합니다. :) –

+0

도움을 주셔서 감사합니다 – jorame

0

코드를 붙여 넣거나 복사했는지 확실하지 않습니다. 그러나 몇 가지 구문 문제가 있습니다

if (control.cheched == false) { 
      objname.disabled = true 
} 

가되어야한다

if (control.checked == false) { 
      objname.disabled = true; 
} 
관련 문제