【问题标题】:CustomValidator textbox required on radiobuttonlist select单选按钮列表选择所需的 CustomValidator 文本框
【发布时间】:2013-03-04 12:03:09
【问题描述】:

在我的页面上,我有一个单选按钮列表和一个文本框。

默认情况下,文本框是隐藏的,如果用户单击“是”,则会显示该文本框。一旦他们单击“是”,则必须先填写文本框,然后才能继续。

我已经输入了以下代码,但它似乎根本不起作用,当按下按钮转到下一页时,它会继续而不是停止并要求用户在框中输入内容。

function Q12iYes() {           
        document.getElementById('txt12i').style.display = "block"
     }
    function Q12iNo() {
        document.getElementById('txt12i').style.display = "none"
    }      


<asp:RadioButtonList ID="rbtn12" runat="server" RepeatDirection="Horizontal">
    <asp:ListItem Value="Yes" onclick="Q12iYes()" /> <asp:ListItem Value="No"  Selected="True" onclick="Q12iNo()" /> 
    </asp:RadioButtonList>
            <br />

    12.i) If &#39;Yes&#39; please provide details<br />
    <br />
    <asp:TextBox ID="txt12i" runat="server" Height="62px" TextMode="MultiLine" Width="343px"></asp:TextBox>
            <br />                
            <asp:CustomValidator ID="MyTxtBoxValidator" runat="server" ControlToValidate="txt12i" ValidateEmptyText="true" ErrorMessage="Please enter some values into Textbox" 
            ClientValidationFunction="validateMyBtn"  Display="Dynamic"> </asp:CustomValidator>
              <script type="text/javascript">
                  function validateMyBtn(oSrc, args) {
                      var rbtnValue = null;
                      var rbtnList = document.getElementsByName('<%=rbtn12.ClientID %>');
                      var radio = rbtnList[0].getElementsByTagName("input");
                      for (var i = 0; i < radio.length; i++) { if (radio[i].checked) rbtnValue = radio[i].value; }
                      if (rbtnValue == "Yes") { args.IsValid = !(args.Value == "") }
                      else { args.IsValid = true; }
} 
</script> 

<asp:Button ID="btnContinue" runat="server" OnClick="btnContinue_Click" Text="Continue" /> 

我已经查看了如何执行此操作,但我所看到的也没有任何效果,或者帮助我了解我哪里出错了。

谁能帮忙?

【问题讨论】:

  • 您需要自定义验证器吗?为什么不使用必填字段验证器?如果输入框不可见,则必填字段验证器不会尝试验证。
  • 从我所有的搜索来看,自定义验证器似乎是我需要的,因为我使用 javascript 在用户选择时显示和隐藏文本框。我正在努力寻找最有效的方法。
  • 你会用jQuery吗?

标签: c# asp.net textbox radiobuttonlist customvalidator


【解决方案1】:

CustomValidator默认不验证空文本,所以设置ValidateEmptyText property:

<asp:CustomValidator  ValidateEmptyText="true" ID="MyTxtBoxValidator" runat="server" ...

编辑 问题是您的 javascript 验证功能仅适用于 IE。这是一个也适用于其他浏览器的版本:

function validateMyBtn(oSrc, args) {
      var rbtnList = document.getElementsByName('<%=rbtn12.ClientID %>');
      var noClicked = false;
      for (var x = 0; x < rbtnList.length; x++) {
          if (rbtnList[x].checked) {
              noClicked = rbtnList[x].value == "No";
              break;
          }
      }
      if (noClicked) 
          args.IsValid = true;
      else
          args.IsValid = args.Value.trim().length > 0;
} 

【讨论】:

  • @saintsfanuk:忽略它,因为在这种情况下你应该明确提到它很重要。
  • 改变了它,它仍然没有任何区别,所以我认为这不是问题。
  • @saintsfanuk:我已经测试了你的代码,它按预期工作。如果选择“是”,验证器将在文本框为空时阻止回发,因为您的客户端脚本:if (rbtnValue == "Yes") { args.IsValid = !(args.Value == "") }。但是你没有显示Q12iYes和Q12iNo的代码。
  • 看来这实际上是一个浏览器问题,我刚刚在 Internet Explorer 上测试过,它可以工作,但在 Chrome 和 Firefox 上它只是继续到下一页。
  • @saintsfanuk:编辑了我的答案。您的 js 函数在 FF 中不起作用。
猜你喜欢
  • 2012-12-14
  • 2013-06-28
  • 2016-05-14
  • 2020-10-15
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
相关资源
最近更新 更多