禁用JavaScript所需的验证
Disable required validation by JavaScript
我有一个创建表单来创建一个对象。create模型具有一些仅可见的属性。hide, .show()),如果复选框被选中并且被标记为必需(通过Model中的Attribute)。
不幸的是,当未选中复选框时,将对隐藏的属性执行所需的验证。
如何禁用此属性所需的验证?
我尝试将输入元素的data-val属性设置为false,但这不起作用。
有主意吗?
提前感谢托拜厄斯
更新:下面是java脚本代码。data-val属性被正确设置为false。似乎验证并不关心这个属性。还有data- value -required属性,但是有一个文本我无法备份。
$(function () {
$("#MyCheckbox")
.change(function () {
if (this.checked) {
$("#divWithChildProperties [data-val]").attr("data-val", true);
$("#divWithChildProperties ").show();
}
else {
$("#divWithChildProperties [data-val]").attr("data-val", false);
$("#divWithChildProperties ").hide();
}
})
});
我用自定义验证属性处理过类似的情况。你可以使用RequiredIf属性,而不是为属性使用Required属性,并且只有当另一个属性是某个值时,你的一些属性才需要。
这是一个关于创建这样一个属性的帖子(在页面中间的"一个更复杂的自定义验证器"部分的例子):http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2
如果你的复选框在你的模型中代表一个属性,这应该工作得很好。
如果你不想用一个新的验证属性来处理这个问题,你将不得不做一些事情,而不仅仅是将data-val属性更改为false。当jQuery validate首先解析表单时,它将值存储在表单的数据中。所以仅仅改变data-val是不够的。您还必须删除存储的验证数据并重新解析表单。下面是一个例子:
// Do this after you've removed/modified the data-val attribute
$('selector for your form').removeData('unobtrusiveValidation');
$('selector for your form').removeData('validator');
$.validator.unobtrusive.parse('selector for your form');
您可以使用下面的JQuery来删除元素的所有验证规则
$('#ElementId').rules('remove');
同样,你可以使用类名,如
$('.ElementClassName').rules('remove');
如果你想删除特定的规则,这样做
$('#ElementId').rules('remove', 'required');
MVC提供的不显眼的javascript插件不会动态地处理数据属性。相反,它在文档就绪时解析结果并缓存它们。
在修改属性后,尝试在表单上调用$.validator.unobtrusive.parse(myForm)
,看看它是否会给您预期的结果。
不引人注目的验证查找此属性data-val="true"
我猜,如果你做一个$('#mycheckbox').data('val','false')
,验证将跳过一个项目与该id。
可能有更合适的方法,但如果没有,就用这个。
欢呼。
在Javascript中有很多方法可以禁用不显眼的验证,但其中大多数似乎有点粗俗…
- 最近发现你可以用提交按钮来做。点击此链接查看信息
//this
<script type="text/javascript">
document.getElementById("backButton").disableValidation = true;
</script>
//or this
<input type="submit" name="backButton" value="Back"
title="Go back to Prev Step" disableValidation="true" />
//or this
<input type="submit" name="backButton" value="Back"
title="Go back to Prev Step" class="mybtn-style cancel" />
- 另一种更灵活但更复杂的方法:您可以通过将
data-val
属性设置为false
来禁用不显眼的验证。但是有一个技巧…
当文档准备好时缓存不显眼的验证数据。这意味着,如果您在开始时使用data-val='true'
,并且稍后更改它,它仍然是true
。
因此,如果您想在文档准备好后更改它,您还需要重置验证器,这将擦除缓存的数据。方法如下:
disableValidation: function () {
//Set the attribute to false
$("[data-val='true']").attr('data-val', 'false');
//Reset validation message
$('.field-validation-error')
.removeClass('field-validation-error')
.addClass('field-validation-valid');
//Reset input, select and textarea style
$('.input-validation-error')
.removeClass('input-validation-error')
.addClass('valid');
//Reset validation summary
$(".validation-summary-errors")
.removeClass("validation-summary-errors")
.addClass("validation-summary-valid");
//To reenable lazy validation (no validation until you submit the form)
$('form').removeData('unobtrusiveValidation');
$('form').removeData('validator');
$.validator.unobtrusive.parse($('form'));
},
你不需要重置所有的消息、输入样式和验证摘要来提交表单,但如果你想在页面加载后更改验证,这是很有用的。否则,即使您更改了验证,以前的错误消息仍然是可见的…
默认的DataAnnotationsModelValidatorProvider
为所有值类型添加了Required属性。您可以通过在答案中添加代码来更改此行为。
您可以实现像"RequiredIf"这样的自定义验证器。
这将使您的模型设计相当明显(不像建议的仅客户端解决方案)。这允许您将验证逻辑与显示逻辑分开(这就是MVC的全部内容)。
请看答案:RequiredIf条件验证属性
和最后那篇博文:ASP中的条件验证。. NET MVC 3
干杯!
- 验证Javascript中的Textarea
- 表单验证JavaScript编号总是返回false
- 验证javascript中的输入没有'不起作用
- 验证JavaScript中是否存在变量
- 验证javascript中的输入是否在2个数字之间
- 禁止的正则表达式._或.-(电子邮件验证/javascript)
- 表单验证Javascript没有响应
- 用于验证 JavaScript 中的字母数字值的正则表达式
- 如何使用正则表达式验证 JavaScript 中的自定义 URL
- 按 ID 验证 JavaScript 中的列表框和单选按钮
- 如何验证 JavaScript 和 html 代码
- 表单验证 - Javascript 删除空格电话号码
- 用于验证 JavaScript 中的条件的正则表达式
- 仅当浏览器无法验证表单时才使用表单验证 JavaScript
- 多个复选框验证 JavaScript
- 验证 Javascript 中的多个部分
- 使用 Jquery 验证 JavaScript 对象是否为空
- 警报框中的基本验证 Javascript
- 登录验证 JavaScript 无法正常工作
- 验证 JavaScript 正则表达式