Если вы не хотите изменять структуру страницы, вы можете исправить эту ошибку, исправив функцию обработки событий delegate
.
jquery.validate.js v1.15.0, строки 401 - 408:
function delegate( event ) {
var validator = $.data( this.form, "validator" ),
eventType = "on" + event.type.replace( /^validate/, "" ),
settings = validator.settings;
if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
settings[ eventType ].call( validator, this, event );
}
}
Моя исправленная версия:
function delegate( event ) {
if (this.form === event.delegateTarget) {
var validator = $.data( this.form, "validator" ),
eventType = "on" + event.type.replace( /^validate/, "" ),
settings = validator.settings;
if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
settings[ eventType ].call( validator, this, event );
}
}
}
Исправление минимизированной версии (jquery.validate.js упаковано для распространения с использованием grunt с uglify) сложнее, но не невозможно function delegate(event)
становится function b(b)
.
Альтернативный подход заключается в исправлении селектора, используемого при связывании delegate
. Я считаю, что это более сложное исправление, но производительность браузера будет чуть лучше.