我正在尝试使用jquery禁用验证器。
我已经看过了 Disable ASP.NET validators with JavaScript 和其他几个人一样。
似乎没有工作但它的突破。
我的代码:
$('.c_MyValdiators').each(function() {
var x = $(this).attr('id');
var y = document.getElementById(x);
ValidatorEnable(y[0], false);
});
我收到错误: val未定义 [打破此错误] val.enabled =(启用!=假); \ r \ n
或者如果我使用
$('.c_MyValdiators').each(function() {
ValidatorEnable($(this), false); OR ValidatorEnable($(this[0]), false);
});
我收到错误:
val.style未定义 [打破此错误] val.style.visibility = val.isvalid? “隐藏”:“可见”; \ r \ n
有任何想法或建议吗?
答案 0 :(得分:6)
我相信ValidatorEnable采用ASP.net ID而不是ASP.net生成的ClientID。您还需要在CodeBehind中进行验证。
这是一个例子:
特别用于能够启用或禁用验证器。如果您只想在某些情况下进行验证,则可能需要更改服务器和客户端上的激活,否则您将发现用户无法提交页面。
以下是上一个示例,其中只有在取消选中复选框时才能验证字段:
public class Conditional : Page {
public HtmlInputCheckBox chkSameAs;
public RequiredFieldValidator rfvalShipAddress;
public override void Validate() {
bool enableShip = !chkSameAs.Checked;
rfvalShipAddress.Enabled = enableShip;
base.Validate();
}
}
这是客户端的等价物:
<input type=checkbox runat=server id=chkSameAs
onclick="OnChangeSameAs();" >Same as Billing<br>
<script language=javascript>
function OnChangeSameAs() {
var enableShip = !event.srcElement.status;
ValidatorEnable(rfvalShipAddress, enableShip);
}
</script>
答案 1 :(得分:6)
我偶然发现了你的问题[一年后]。 我也想使用JQuery在页面上禁用所有验证器,这是我处理它的方式。
$('span[evaluationfunction]').each(function(){ValidatorEnable(this,false);});
我在页面上查找具有evaluatefunction属性的每个span,然后为每个span调用ValidatorEnabled。
我认为代码的$('this')部分是导致hickup的原因。
答案 2 :(得分:2)
ValidatorEnable(document.getElementById($(this).attr('id')), true);
答案 3 :(得分:2)
我有另一种解决方案,即使用span标签的'enabled'属性作为验证器。我在表单上显示或隐藏了不同的div,因此我需要禁用隐藏div中字段的验证。该解决方案关闭验证而不触发它们。
如果你有一组RequiredFieldvalidator控件,它们都包含一个可以用来抓取它们的公共字符串,那么jquery是这样的:
$("[id*='CommonString']").each(function() {
this.enabled = false; // Disable Validation
});
or
$("[id*='CommonString']").each(function() {
this.enabled = true; // Enable Validation
});
希望这有帮助。
约翰
答案 4 :(得分:1)
我只是遇到了同样的问题,感谢其他答案,因为它有助于发现问题,但他们没有详细说明原因。
我认为这是因为ValidatorEnable()需要一个与ID相对的DOM对象(即验证控制对象)。
$(selector).each()将“this”设置为当前迭代的DOM元素,即从jquery文档中引用:
“更重要的是,回调是在当前环境中触发的 DOM元素,因此关键字this指的是元素。“ - http://api.jquery.com/each/
因此,您不需要这样做:document.getElementById($(this).attr('id')
相反ValidatorEnable(this, true);
没问题。
有趣的是,Russ的答案提到需要禁用服务器端验证,这确实有意义 - 但我不需要这样做(这有关!)。
废弃我以前的评论,这是因为我以前在控制台上禁用了控制器。
答案 5 :(得分:0)
ValidatorEnable函数将对象作为第一个参数,而不是对象id的字符串。
答案 6 :(得分:0)
以下是处理此问题的简单方法。
将新类添加到Validation控件。
然后使用jquery查找该类并禁用该控件。
示例:
if (storageOnly == 1)
{
$('#tblAssignment tr.assdetails').addClass('hidden');
$('span[evaluationfunction]').each(function ()
{
if ($(this).hasClass('assdetail'))
{ ValidatorEnable(this, false); }
});
}
else
{
$('#tblAssignment tr.assdetails').removeClass('hidden');
}
* 就像魅力一样。 **对于你富有想象力的类型,assdetail ==任务细节。
这里取决于if条件,我要么隐藏行然后禁用验证器,要么从行中删除隐藏的类..
答案 7 :(得分:0)