Обновлено: Чтобы поставить вопрос в перспективе, я создал еще один Скрипка, который показывает ту же форму вне модального окна.
Когда он соответствует правильным условиям, то есть вы вводите адрес электронной почты и нажимаете кнопку Get Started, он отправляет правильное отображение страницы PHP, в этом случае отображается ошибка 404, но он делает то, что должен делать, РАЗМЕСТИТЬ!
ИСХОДНАЯ ПРОБЛЕМА: Теперь вернемся к проблеме: я хотел бы отправить свою форму внутри модального окна начальной загрузки, но когда я открываю модальное окно, набираю электронное письмо и нажимаю кнопку начала работы: НИЧЕГО НЕ ПРОИЗОШЛО
Что я делаю неправильно? Отсутствует ли решение JavaScript для правильной отправки формы или мешают ошибки проверки?
Я новичок в JavaScript, поэтому я не могу понять решение для кодирования, если оно на самом деле основано на js.
Пожалуйста, помогите мне разобраться в этой странной модальной проблеме, спасибо!
Рабочий пример: https://jsfiddle.net/o5vpt6ck/3/
HTML:
<form id = "signup-form" class = "cd-signin-modal__form" action = "confirm.php" method = "post">
<h3 class = "bigsentence black text-center font-weight-bold">Create</h3>
<p class = "cd-signin-modal__fieldset">
<label class = "cd-signin-modal__label cd-signin-modal__label--email cd-signin-modal__label--image-replace" for = "signup-email">Enter your email address</label>
<input class = "cd-signin-modal__input cd-signin-modal__input--full-width cd-signin-modal__input--has-padding cd-signin-modal__input--has-border signupfield" id = "email" type = "email" name = "email" placeholder = "Enter your email address">
</p>
<p class = "cd-signin-modal__fieldset">
<input class = "cd-signin-modal__input cd-signin-modal__input--full-width" name = "submit" type = "submit" value = "GET STARTED">
</p>
</form>
JS:
$("#signup-form").validate ({
// validation rules for registration formd
errorClass: "error-class",
validClass: "valid-class",
errorElement: 'div',
errorPlacement: function(error, element) {
if (element.parent('.input-group').length) {
error.insertAfter(element.parent());
} else {
error.insertAfter(element);
}
},
onError : function(){
$('.input-group.error-class').find('.help-block.form-error').each(function() {
$(this).closest('.form-group').addClass('error-class').append($(this));
});
},
rules: {
email: {email:true, required:true}
},
messages: {
email: {
required: "Please enter your email address",
},
highlight: function(element, errorClass) {
$(element).removeClass(errorClass);
}
}
});
onError
!У вас есть логика проверки, но вы не говорите ей, что делать, когда форма действительно действительна!
Вам нужно добавить это в объект проверки:
submitHandler: function(form) {
$(form).submit(); // You submit the actual form here
}
https://jqueryvalidation.org/validate/#submithandler
Попробуйте написать так вместо form.submit();
, см. Здесь jsfiddle.net/o5vpt6ck/6. Подача действительно происходит, попробуйте ее на своем коде вне jsfiddle
Эта рабочий пример тоже не работает, я не смог заставить ее работать с моим кодом. Пожалуйста, посмотрите эту скрипку: jsfiddle.net/okuwv57m видите, когда вы вводите правильный адрес электронной почты и нажимаете кнопку отправки, он переходит на следующую страницу? Я хочу сделать это внутри скрипки
В плагин для submitHandler
встроена функция по умолчанию, поэтому нет необходимости указывать ее!
Я думаю, что настоящая проблема в другом. Я отлаживал загруженный вами код и обнаружил, что в вашем JS-коде есть ошибка.
проблема возникает из строки номер 82, входной сигнал является нулевым, поэтому ваш код ломается в функции AddClass.
Сообщите мне, если это решит вашу проблему. Ваше здоровье :)
К сожалению, этого не произошло :( Проблема заключается в самом модальном окне, когда я помещаю код проверки jQuery внутри любого модального окна, после выполнения условий проверки он не отправляется.
Пожалуйста, никогда не публикуйте код или ошибки в виде изображений, не публикуя также фактический код и ошибки. В противном случае ваш контент не будет виден поисковой системой.
В вашем коде не хватает двух вещей
Добавьте это в валидатор формы регистрации
submitHandler: function(frm) {
frm.submit();
}
Затем в форме регистрации удалите
name = "submit"
из
<input class = "cd-signin-modal__input cd-signin-modal__input--full-width" name = "submit" value = "GET STARTED" type = "submit">
Вы можете прочитать объяснение здесь javascript submit () не является функцией?
Феноменальный ответ! Спасибо, что не только объяснили проблему, но и предоставили мне ресурсы, чтобы узнать больше с помощью другого вопроса Stackoverflow. Ты лучший!
К вашему сведению - опция submitHandler
не требуется, потому что указанная вами функция в точности совпадает с функцией submitHandler
по умолчанию, уже встроенной в плагин. Другими словами, оставьте submitHandler
, и по умолчанию он будет работать точно так же. Ваша проблема была вызвана name = "submit"
, а не отсутствием submitHandler
.
Нет, не работает. submitHandler является обязательным. Проверить ссылку jqueryvalidation.org/documentation/#link-too-much-recursion
Вы не понимаете, о чем говорите. Если вы используете $(form).submit()
вместо form.submit()
, произойдет слишком много рекурсии. Если вы посмотрите на исходный код, вы увидите, что submitHandler
с этой функцией уже встроен в плагин, и вы используете его только тогда, когда хотите изменить или добавить к этому поведению по умолчанию. Утверждение, что submitHandler
является обязательной опцией, легко опровергается. См. Этот jsFiddle, который показывает проверку и отправляет, когда он действителен, без необходимости указывать submitHandler
: https://jsfiddle.net/xnpo7m6v/
Я проверял предоставленный вами код, но он выдает несколько ошибок в js, например, он не может найти элемент с идентификатором «signup-username», и вы дали id = «email» нескольким элементам. Идентификатор можно присвоить одному элементу на одной странице. Поэтому, пожалуйста, обновите его до правильного кода.