У меня есть простая форма MVC3, в которой включено поле даты и проверка на стороне клиента (jquery.validate / jquery.validate.unobtrusive). Я добавил код, чтобы прикрепить средство выбора даты (jQuery UI) к полю даты согласно документации. Однако, если средство выбора даты является последним, что я нажимаю перед нажатием кнопки отправки, и поле даты недопустимо, оно автоматически отображает средство выбора даты для этого поля. Я не хочу этого Как я могу отключить?
Редактировать:
После просмотра кода подключаемого модуля проверки похоже, что он пытается вручную сфокусироваться на последнем активном элементе управления вводом с помощью функции focusInvalid (), приведенной ниже:
focusInvalid: function() {
if( this.settings.focusInvalid ) {
try {
$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])
.filter(":visible")
.focus()
// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
.trigger("focusin");
} catch(e) {
// ignore IE throwing errors when focusing hidden elements
}
}
},
Похоже, есть 2 варианта решения этой проблемы. Одним из них является установка параметра focusInvalid на самом валидаторе в значение false. Вместо этого я решил сделать обезьянку-патч для функции focusInvalid, поскольку она позволяет мне сосредоточиться на ПЕРВОМ недопустимом элементе в форме, а не на последнем активном элементе.
$('form').data('validator').focusInvalid = function () {
$(this.currentForm).find('.input-validation-error').first().focus();
};
Мне было бы интересно услышать другие подходы к этой проблеме, однако.