使用jquery启用/禁用asp:validators
我正在使用向导,用户可以在其中注册。 有一个asp:RadioButtonList有两个选项,当radiobutton改变时,向导中的一些输入字段会发生变化。 在每个字段上都有一些asp:Validators(例如asp:RequiredFieldValidator)。 问题是,当用户提交页面时,隐藏文本框的validation器仍然会弹出。
首先,这里是div标签,它改变了显示的文本框和RadioButtonList
* * Privat Offentlig
我试图使用类似下面的JQuery来解决它,我已经读过它应该做的伎俩,但不幸的是它没有:
$(document).ready(function () { $('# input').change(function () { if ($(this).val() == "1") { $('#txtNumber').toggle('fast'); $('#txtNumber2').toggle('fast'); ValidatorEnable($('#')[0], false); ValidatorEnable($('#')[0], true); } if ($(this).val() == "2") { $('#txtNumber').toggle('fast'); $('#txtNumber2').toggle('fast'); ValidatorEnable($('#')[0], false); ValidatorEnable($('#')[0], true); } }); });
那么,任何想法都有什么不对?
validation程序的客户端API在这里 。
您可能能够适应您的需求(这将通过客户端脚本禁用所有validation器):
if (Page_Validators) { PageValidators.forEach(function(pageValidator) { if (pageValidator == null) {return;} vldGrp = pageValidator.validationGroup; ValidatorEnable(pageValidator, false); }); };
所以你可以添加一个if
块来检查validation器名称,或者更多的是.controlToValidate
返回validation器的目标ID – 然后禁用它:
if (Page_Validators) { PageValidators.forEach(function(pageValidator) { if (pageValidator == null) {return;} if (pageValidator.controltovaliddate != "<%= txtNumber2.ClientID %>") { return; } ValidatorEnable(pageValidator, false); }); };
如果你不需要检查任何进一步的validation器,你也应该在循环中添加一个中断,如果它是正确的。 您可以使用.some
而不是.forEach
来提前破解:
if (Page_Validators) { PageValidators.some(function(pageValidator) { if (pageValidator == null) {return false;} if (pageValidator.controltovaliddate != "<%= txtNumber2.ClientID %>") { return false; } ValidatorEnable(pageValidator, false); return true; }); };
您可以将其封装到一个函数中:
var validatorState = function(element, isEnabled) { if (Page_Validators) { PageValidators.some(function(pageValidator) { if (pageValidator == null) {return false;} if (pageValidator.controltovaliddate != "<%= txtNumber2.ClientID %>") { return false; } ValidatorEnable(pageValidator, false); return true; }); }; };
并使用:
validatorState('txtCancellationReson', true);
要么
validatorState($('#txtCancellationReson').attr('id'), true);
我发现更好的选择是简单地使用:
document.getElementById("<%=myValidator.ClientID %>").enabled = true;
上面建议的ValidatorEnabled选项会自动调用链接控件的validation,在我的情况下会显示错误消息“请输入卖家名称的值”,这是不必要或不需要的。
使用“.enabled = true”选项不会。
对“RadioButtonList1”使用CustomValidator控件,并将控件visibilty逻辑分离到另一个javascript函数。
Privat Offentlig asp:CustomValidator>