У меня есть проект 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(); };
});
Это работает над одним проектом, в то время как он генерирует это исключение в другом проекте, потому что $.data($ ('form') [0], 'validator') возвращает undefined ($.data($ ('form' ) [0]) возвращает пустой объект):
Uncaught TypeError: невозможно прочитать настройки свойств undefined
Однако jQuery Validation отлично работает при нажатии кнопки отправки, поэтому все остальное должно быть правильно настроено.
Я загружаю эти скрипты в конец тега 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>
Решение: Это код, который работает:
$(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(); };
}});
});
Проблема заключалась в том, что новый плагин Validation проверяет наличие каких-либо элементов, которые должны быть проверены, и у меня было две формы на одной странице, причем первая форма не имела никаких проверенных входных элементов.