Ошибка «слишком много вызовов в стек» в консоли, возможно потому, что метод onchange запускается, когда я обновляю значения в форме перед отправкой
Хм нет. В submitHandler
не запускается проверка, так как на данный момент форма уже считается действительной . Проверка только запускается при взаимодействии пользователя с формой. Программно изменяющиеся значения формы не могут запускать проверку, если вы также не программно запускаете проверку.
Как отключить валидатор в начале функции submitHandler?
Вы не делаете. Вам не нужно отключать проверку в начале submitHandler
, потому что проверка на 100% завершена на этом этапе. Никакая дополнительная проверка не запускается submitHandler
.
Давайте разберемся с этим ...
submitHandler: function(e) {
$("#signupForm").submit(function(e){
e.preventDefault();
});
// your encryption code here
$('#signupForm').submit();
}
Вы не можете передать e
в submitHandler
и ожидать, что плагин примет это как «событие». В этом контексте нет событий. form
является единственным принятым аргументом и представляет объект формы, распознаваемый плагином.
submitHandler: function(form) {
e.preventDefault()
не имеет никакого смысла в обратном вызове submitHandler
и, вероятно, здесь ничего не делает. Также см. Пункт 1. Функция обратного вызова submitHandler
уже предотвращает поведение по умолчанию действия отправки.
$("#signupForm").submit
вызывает вашу петлю ... форма действительна, поэтому submitHandler
срабатывает, когда вы говорите, что она отправляется снова, вызывая повторный запуск submitHandler
.... и т. Д. И т. Д.
Последняя строка, $('#signupForm').submit()
, должна быть form.submit()
.
См. этот раздел документации , в котором конкретно рассматривается созданный вами цикл рекурсии.
Другими словами ...
плагин jQuery Validate предотвращает отправку по умолчанию с помощью собственной функции submitHandler
.
тогда вы бы запретили стандартную процедуру обработки отправки плагина jQuery Validate, заменив ее собственной пользовательской функцией submitHandler
.
Возобновить нормальный поток плагинов, вызвав form.submit()
в конце функции submitHandler
. (Опционально, form.submit
может быть заменено на Ajax.)
Все должно быть так просто ...
submitHandler: function(form) { // <- note the "form" argument
// below replaces default submitHandler callback
// form is valid here - no validation is triggered
// your encryption code here
form.submit(); // now submit data (does not call submitHandler or new validation)
}