Более элегантное и быстрое решение - просто переопределить стандартные события нажатия и нажатия клавиш, добавив необходимый код следующим образом, вместо добавления другого события прослушивания
$("#form").validate({
submitHandler: function(form) {
form.submit();
},
onkeyup: function( element, event ) {
if ( event.which === 9 && this.elementValue(element) === "" ) {
return;
} else if ( element.name in this.submitted || element === this.lastElement ) {
this.element(element);
}
if (this.checkForm()) { // checks form for validity
$('a.submit').attr('class', 'submit btn btn-success'); // enables button
} else {
$('a.submit').attr('class', 'submit btn btn-danger disabled'); // disables button
}
},
onclick: function( element ) {
// click on selects, radiobuttons and checkboxes
if ( element.name in this.submitted ) {
this.element(element);
// or option elements, check parent select in that case
} else if ( element.parentNode.name in this.submitted ) {
this.element(element.parentNode);
}
if (this.checkForm()) { // checks form for validity
$('a.submit').attr('class', 'submit btn btn-success'); // enables button
} else {
$('a.submit').attr('class', 'submit btn btn-danger disabled'); // disables button
}
}
})
Со следующим кодом css для триггера отправки - изначально отключено (классы начальной загрузки 3):
<a onclick="if(!$(this).hasClass('disabled')) { $('#form').submit(); }" class="submit btn btn-danger disabled">button_save</a>
Это очень легко можно использовать с плагином jquery areYouSure , чтобы разрешить отправку только при внесении реальных изменений:
if (this.checkForm() && $('#form').hasClass('dirty')) { // checks form for validity
инициализация плагина с помощью без вывода сообщений:
$('#form').areYouSure( {'silent':true} );