【问题标题】:how to make items required when checkbox is ticked?勾选复选框时如何制作所需的项目?
【发布时间】:2015-09-13 12:26:33
【问题描述】:

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

<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 函数,但它不能正常工作。即使未勾选复选框,它也会要求填写文本框。如果未勾选复选框,则不需要其他字段。那么我该如何解决这个问题呢?

function updateValidator() {
        var enableValidator = !event.srcElement.status;
        var rfvHazLicenseNo = document.getElementById('rfvHazLicenceNo');
        ValidatorEnable(rfvHazLicenseNo, enableValidator);
    }

试用过的客户验证器:

     <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);
        }
    }

但是当勾选复选框时,它并不需要文本框。

【问题讨论】:

标签: javascript c# asp.net visual-studio


【解决方案1】:

I believe you want to use a custom validator. 因此,如果 chkHazTrained.Checked == false,或者如果 ChkHazTrained.Checked == true 并且 textbox/ddl 有值,则 textbox/ddl 将是有效的。

我想您也可以使用 RequiredFieldValidators 并在 Checkbox 的 CheckedChanged 事件上更新其 .Enabled 属性来使其工作,但这需要您的复选框回发。

【讨论】:

  • 我试过这样做,但它不起作用。勾选复选框时没有任何反应。请查看有问题的代码
  • 我认为你想要 args.IsValid = (args.Value.length &gt; 0); 而不是 args.IsValid = (args.Value.length == 0); - 现在它正在检查文本框是否为空,而不是非空。
  • No 还是不行。如果勾选复选框,则不需要文本框
  • 您能提供更多信息吗?您的 javascript 函数是否包含在 &lt;script type="text/javascript"&gt; &lt;/script&gt; 中?你有错误吗?如果你在 validateHazLicence 中设置断点,它会被执行吗?
  • 是的,它包含在脚本中。不,我没有收到错误。不,如果我在那里放一个断点,它就不会被执行
【解决方案2】:

复选框中的单击事件是服务器端事件的参考,对于 javascript,您需要客户端版本。为此,您可以使用 onclick 和要调用的函数在服务器端添加一个属性。但我建议使用 jquery 并添加点击事件。这是向元素添加点击事件的链接https://api.jquery.com/click/

在javascript函数中你需要像这样启用验证器

 ValidatorEnable(ValBano, true);

验证您的变量是否正在发送字符串以及这是否会导致问题。您还需要检查您的 javascript 是框架没有更改复选框或其他元素的名称。

例如,使用它来获取验证控件和/或复选框的正确名称。如果您不使用不更改名称的配置,请始终将其用于服务器端控件。

 var ValBano = document.getElementById('<%=vreqBanos.ClientID %>');

我还建议使用 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);
  }

});

【讨论】:

  • 函数 updateValidator 代码确实有效,但它不检查复选框是否被勾选,因此它始终需要文本框。我尝试先检查复选框是否为真,但它仍然不起作用
  • 您好,我已经更新了我的代码,现在您可以在 else 中添加禁用代码。在此如果复选框值被选中 if ($('#chkAddEducacion3').is(':checked')) {
猜你喜欢
  • 2017-10-17
  • 2013-02-12
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多