Javascript 勾选复选框时如何使项目成为必需项?
我正在尝试设置一个文本框,如果勾选复选框,则dropdownlist和带有日期选择器的文本框都是必需的。因此,如果未勾选复选框,则字段不是必需的,但如果勾选,则所有字段都是必需的Javascript 勾选复选框时如何使项目成为必需项?,javascript,c#,asp.net,visual-studio,Javascript,C#,Asp.net,Visual Studio,我正在尝试设置一个文本框,如果勾选复选框,则dropdownlist和带有日期选择器的文本框都是必需的。因此,如果未勾选复选框,则字段不是必需的,但如果勾选,则所有字段都是必需的 <table> <tbody> <tr> <td class="Header">Haz Trained?</td> <td></td> <td>
<table>
<tbody>
<tr>
<td class="Header">Haz Trained?</td>
<td></td>
<td>
<asp:CheckBox runat="server" ID="chkHazTrained" OnClick="updateValidator();"/>
</td>
</tr>
<tr>
<td class="Header">Haz License No</td>
<td></td>
<td>
<asp:TextBox runat="server" ID="txtHazLicenseNo"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvHazLicenseNo" ControlToValidate="txtHazLicenseNo" ErrorMessage="You must enter a License No." runat="server" />
</td>
</tr>
<tr>
<td class="Header">License Type</td>
<td></td>
<td>
<asp:DropDownList runat="server" ID="ddlHazLicenseType">
</asp:DropDownList>
</td>
</tr>
<tr>
<td class="Header">Expiry Date
</td>
<td></td>
<td>
<asp:TextBox runat="server" ID="txtHazLicenseExpiryDate" rel="datepicker" CssClass="dateonly"></asp:TextBox>
</td>
</tr>
</tbody>
</table>
已尝试使用customervalidator:
<asp:TextBox runat="server" ID="txtHazLicenseNo" Text=""></asp:TextBox>
<asp:CustomValidator id="CustomValidator2" runat="server"
ControlToValidate = "txtHazLicenseNo"
ErrorMessage = "Please enter"
ClientValidationFunction="validateHazLicence" >
</asp:CustomValidator>
function validateHazLicence(oSrc, args){
if(chkHazTrained.checked == true)
{
args.IsValid = (args.Value.length > 0);
}
}
功能验证许可证(oSrc,args){
如果(chkHazTrained.checked==true)
{
args.IsValid=(args.Value.length>0);
}
}
但是当勾选复选框时,并不需要textbox。复选框中的click事件是服务器端事件的参考,而javascript则需要客户端版本。为此,您可以使用onclick和要调用的函数在服务器端添加一个属性。但是我建议使用jquery并添加一个click事件。下面是向元素添加单击事件的链接
<table>
<tbody>
<tr>
<td class="Header">Haz Trained?</td>
<td></td>
<td>
<asp:CheckBox runat="server" ID="chkHazTrained" OnClick="updateValidator();"/>
</td>
</tr>
<tr>
<td class="Header">Haz License No</td>
<td></td>
<td>
<asp:TextBox runat="server" ID="txtHazLicenseNo"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvHazLicenseNo" ControlToValidate="txtHazLicenseNo" ErrorMessage="You must enter a License No." runat="server" />
</td>
</tr>
<tr>
<td class="Header">License Type</td>
<td></td>
<td>
<asp:DropDownList runat="server" ID="ddlHazLicenseType">
</asp:DropDownList>
</td>
</tr>
<tr>
<td class="Header">Expiry Date
</td>
<td></td>
<td>
<asp:TextBox runat="server" ID="txtHazLicenseExpiryDate" rel="datepicker" CssClass="dateonly"></asp:TextBox>
</td>
</tr>
</tbody>
</table>
在javascript函数中,您需要像这样启用验证器
ValidatorEnable(ValBano, true);
验证变量是否发送字符串,以及这是否导致问题。您还需要在javascript中检查框架是否未更改复选框或其他元素的名称
例如,使用此选项可获得验证控件和/或复选框的正确名称。如果您没有使用配置来不更改名称,请始终将其用于服务器端控件
var ValBano = document.getElementById('<%=vreqBanos.ClientID %>');
var ValBano=document.getElementById(“”);
此外,我还建议使用jquery来读取复选框中的值,这样更容易,并且跨浏览器兼容
下面是一些使用jquery检查复选框是否选中的代码:
$('#chkAddEducacion3').click(function () {
if ($('#chkAddEducacion3').is(':checked')) {
\\get the validator
var ValBano = document.getElementById('<%=vreqBanos.ClientID %>');
\\enable the validtor
ValidatorEnable(ValBano, true);
}
else
{
\\get the validator
var ValBano = document.getElementById('<%=vreqBanos.ClientID %>');
\\disable the validtor
ValidatorEnable(ValBano, false);
}
});
$('chkaddeduccion3')。单击(函数(){
如果($('#chkaddeduccion3')。是(':checked')){
\\获取验证器
var ValBano=document.getElementById(“”);
\\启用validtor
ValidatorEnable(ValBano,true);
}
其他的
{
\\获取验证器
var ValBano=document.getElementById(“”);
\\禁用validtor
ValidatorEnable(ValBano,false);
}
});
因此,如果chkHazTrained.Checked==false,或者如果chkHazTrained.Checked==true且文本框/ddl有一个值,则文本框/ddl将有效
我想您可以使用RequiredFieldValidators并在复选框的CheckedChanged事件上更新其.Enabled属性使其工作,但这将需要您的复选框回发。我尝试过这样做,但不起作用。勾选复选框时不会发生任何情况。请查看有问题的代码,我想不是
args.IsValid=(args.Value.length==0)代码>您想要args.IsValid=(args.Value.length>0)代码>-现在它正在检查文本框是否为空,而不是不为空。否仍然不起作用。如果勾选了复选框,则不需要文本框。您能提供更多信息吗?您的javascript函数是否包装在
中?你有错误吗?若你们在ValidateHazLicense中设置了一个断点,它会被执行吗?是的,它被封装在脚本中。不,我没有出错。不,如果我把断点放在那里,它不会被执行函数updateValidator代码可以工作,但它不会检查复选框是否被勾选,因此它一直需要文本框。我尝试先检查复选框是否为真,但它仍然不起作用。我已经更新了代码,现在在“其他”中可以添加禁用代码。在这个例子中,如果选中复选框值if($(''chkaddeduccion3')。is(':checked')){@naveen,我会尝试下面的例子,这就是我问的原因。事件绑定在jQuery中容易得多,尽管它只是众多javascript库中的一个