wer*_*zui 11 javascript forms asp.net validation jquery
我有一个ASP.Net MVC项目,我正在使用不引人注目的jQuery验证.当一个元素失去焦点时添加验证,我正在打电话
$(document).ready(function () {
// enable validation when an input loses focus.
var settngs = $.data($('form')[0], 'validator').settings;
settngs.onfocusout = function (element) { $(element).valid(); };
});
Run Code Online (Sandbox Code Playgroud)
这是在一个项目上工作,而它在另一个项目上抛出此异常,因为$ .data($('form')[0],'validator')返回undefined($ .data($('form')[0])返回一个空对象):
未捕获的TypeError:无法读取未定义的属性"设置"
但是,当按下提交按钮时,jQuery验证工作正常,因此其他所有内容都应正确设置.
我在body标签的末尾加载这些脚本:(上面列出的函数在customvalidations.js中,所以它应该在验证器应用到表单后执行)
<script src="/Staffing/Scripts/jquery-2.1.1.js"></script>
<script src="/Staffing/Scripts/globalize/globalize.js"></script>
<script src="/Staffing/Scripts/globalize/cultures/globalize.culture.de-DE.js"></script>
<script src="/Staffing/Scripts/bootstrap.js"></script>
<script src="/Staffing/Scripts/respond.js"></script>
<script src="/Staffing/Scripts/bootstrap-datepicker.js"></script>
<script src="/Staffing/Scripts/bootstrap-datepicker-globalize.js"></script>
<script src="/Staffing/Scripts/locales/bootstrap-datepicker.de.js"></script>
<script src="/Staffing/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Staffing/Scripts/jquery.validate.js"></script>
<script src="/Staffing/Scripts/jquery.validate.globalize.js"></script>
<script src="/Staffing/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Staffing/Scripts/localization/messages_de.js"></script>
<script src="/Staffing/Scripts/customvalidations.js"></script>
<script src="/Staffing/Scripts/uiadditions.js"></script>
<script src="/Staffing/Scripts/default.js"></script>
Run Code Online (Sandbox Code Playgroud)
解决方案: 这是有效的代码:
$(document).ready(function () {
// enable validation when an input loses focus.
var allForms = $('form');
$.each(allForms, function (key, value) {
var val = $.data(value, 'validator');
if (val != undefined) {
var settngs = val.settings;
settngs.onfocusout = function (element) { $(element).valid(); };
}});
});
Run Code Online (Sandbox Code Playgroud)
问题是新的Validation插件检查是否存在任何应该被验证的元素,并且我在同一页面上有2个表单,第一个表单没有任何经过验证的输入元素.
sam*_*y34 16
我刚刚升级到Microsoft.jQuery.Unobtrusive.Validation.3.2.0包.我遇到了同样的问题.您是否有可能升级到相同版本?
如果是这样,我可能会提供我的两分钱:).经过一些调试后,我注意到在jquery.validate.unobtrusive.js中进行了以下更改:
以前的版本:
var $forms = $(selector)
.parents("form")
.andSelf()
.add($(selector).find("form"))
.filter("form");
Run Code Online (Sandbox Code Playgroud)
新版本:
$forms = $selector.parents()
.addBack()
.filter("form")
.add($selector.find("form"))
.has("[data-val=true]"); // key point!
Run Code Online (Sandbox Code Playgroud)
关键似乎是:has("[data-val=true]").也就是说,如果您的表单没有具有该属性值的任何后代(如输入元素),则验证帮助程序将不会对其进行解析,并且不会将"验证程序"数据分配给该表单元素.如果您尝试在稍后阶段访问该表单的验证器,则会出现此"未定义"错误.
在我的情况下,发生这种情况的表单实际上并没有使用任何验证,因此它们没有这个属性.然后,我可以更改自定义验证器逻辑,以在更改验证器设置之前首先检查验证器是否存在.
希望有所帮助.