2013-03-17 2 views
0

Мне нужно включить/отключить asp.TextBox/Input в зависимости от CheckBox. Если CheckBox.Checked = true, то мне нужно включить asp.TextBox/Input, или если CheckBox.Checked = false, мне нужно будет отключить asp.TextBox/Input.Включить/отключить asp: TextBox Control на основе CheckBox.Checked true или false

Ниже приведен код, который у меня есть, но он работает только при первом щелчке, что означает, что если я поставлю флажок, он включит 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 отображает другой идентификатор. –

+0

Извините, не уверен, что вы имеете в виду? – jorame

+1

Если вы посмотрите на отображаемый HTML-код в своем браузере, идентификаторы ваших элементов управления должны быть чем-то не очень красивым, например 'ctl00_ContentPlaceHolder_isportreqinput'. Но ваш обработчик 'onclick' вызывает функцию с исходными идентификаторами. Если вы не изменили рендеринг идентификатора по умолчанию, это должно быть 'fncport (this.form. <% = Isportreqinput.ClientID%>, ...)', чтобы получить идентификатор визуализированного клиента. –

ответ

0

this.form.isportreqinput не является правильным способом получить ссылку на isportreqinput флажок из вашего HTML. 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" /> 

Кроме того, вы mispelled checked во втором случае заявления. Вам даже не нужна инструкция if, просто установите отключенное значение в противоположность проверенному значению.

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

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

Кроме того, поскольку элементы управления запускаются с runat = "server", изменения ids, и вам, вероятно, нужно позвонить им с ClientID – Aristos

+0

@Aristos, да, извините, пропустил это :) –

+0

Спасибо за вашу помощь – jorame

0

Не уверен, что вы вставили свой код или скопировали его. Но есть несколько вопросов синтаксиса:

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

Должно быть:

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