验证条件控制

时间:2014-01-29 08:22:47

标签: c# jquery asp.net vb.net

我努力让这个以我需要的方式工作。我有两个RequiredFieldValidators和两个文本框(旁注:虽然我有下面的Javascript,我不介意以另一种方式做这个。我确实尝试了代码,但实现验证没有启动,直到我点击两次按钮):

<asp:TextBox ID="EmailTextbox" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="EmailR" runat="server" ErrorMessage="Email" ControlToValidate="EmailTextbox" ></asp:RequiredFieldValidator>
<asp:TextBox ID="NameTextbox" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="NameR" runat="server" ErrorMessage="Enter your name" ControlToValidate="NameTextbox" ></asp:RequiredFieldValidator>

然后我有一些脚本

<script type="text/javascript">
    $(document).ready(function () {
        $('#<%=EmailTextbox.ClientID%>').keyup(function () {
            if ($(this).val() != '') {
                ValidatorEnable(document.getElementById('<%= NameR.ClientID%>'), true);

                }
                else
                    ValidatorEnable(document.getElementById('<%= NameR.ClientID%>'), false);

            });
    });
</script>

我想做的是:

如果EmailTextbox有电子邮件,则禁用NameTextbox验证。 如果EmailTextbox没有电子邮件,则启用NameTextbox验证并禁用EmailTextbox验证。

由于我是JQuery / Javascript的新手,我已经尝试了多次尝试实现上述但是更多地阅读它,我有可能得到错误的JQuery文件(说这是一个现有项目我还没有真正为任何JQuery添加任何引用,所以它很可能是我有正确的代码但需要引用JQuery或需要包含新版本。)

总的来说,如果我可以

谢谢

3 个答案:

答案 0 :(得分:1)

你可以尝试一下

$(document).ready(function () {
        $('#<%=EmailTextBox.ClientID%>').keyup(function () {
            if ($(this).val() != null && $(this).val().length != 0) {
                $('#<%= NameRequiredFieldValidator.ClientID%>').hide();

            }
            else {
                $('#<%= NameRequiredFieldValidator.ClientID%>').show();
                $('#<%= EmailRequiredFieldValidator.ClientID%>').hide();
            }
        });

答案 1 :(得分:0)

在您的代码中,您在发送电子邮件时会错误地启用验证 value is not null禁用名称验证并启用电子邮件其他反之名

      <script type="text/javascript">
    $(document).ready(function () {
        $('#<%=EmailTextbox.ClientID%>').keyup(function () {
            if ($.trim($(this).val()).length)
                ValidatorEnable(document.getElementById('<%= NameR.ClientID%>'), false);
                ValidatorEnable(document.getElementById('<%= EmailTextbox.ClientID%>'), true);

                }
                else
               {
                    ValidatorEnable(document.getElementById('<%= NameR.ClientID%>'), true);
                    ValidatorEnable(document.getElementById('<%= EmailTextbox.ClientID%>'), false);
               }

            });
    });
</script>

答案 2 :(得分:0)

你可以试试这个,类似于你所拥有的。

function doSomething()
{
  var myVal = document.getElementById('myValidatorClientID');
  ValidatorEnable(myVal, false); 
}

或者,您可以对它们使用visible = true / false,这会使它们处于非活动状态(意味着从后面的代码设置可见属性)..这可能会花费您使用scripmanager和__doPostBack后面的代码的ajax行程来调用一个服务器端函数,它可以处理你的逻辑......很多开发人员都没有意识到至少在webforms中,你可以用JS调用你的代码后面的代码,只是要非常小心 - 因为每次调用都会变得昂贵...

关于从(“前端到后面的代码通过JS”)进行通信的好文章 -  http://www.codedigest.com/Articles/ASPNET/320_Doing_or_Raising_Postback_using___doPostBack()_function_from_Javascript_in_AspNet.aspx

希望能帮助你让你重回正轨!