我努力让这个以我需要的方式工作。我有两个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或需要包含新版本。)
总的来说,如果我可以
谢谢
答案 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
希望能帮助你让你重回正轨!