Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 勾选复选框时如何使项目成为必需项?_Javascript_C#_Asp.net_Visual Studio - Fatal编程技术网

Javascript 勾选复选框时如何使项目成为必需项?

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>

我正在尝试设置一个文本框,如果勾选复选框,则dropdownlist和带有日期选择器的文本框都是必需的。因此,如果未勾选复选框,则字段不是必需的,但如果勾选,则所有字段都是必需的

<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库中的一个