У меня есть форма, в которой раньше я использовал простой пост с <button name="submit" id="register" value="Register">Continue</button>
Чем я решил изменить это сообщение на сообщение jquery ajax:
<script type="text/javascript">
$(document).ready(function () {
$("#register").click(function () {
if (!$("form").valid())
return false;
var isContinue = false;
$.ajax({
url: "/Validate",
type: "POST",
dataType: "text",
data: { recaptcha_challenge_field: $("input#recaptcha_challenge_field").val(), recaptcha_response_field: $("input#recaptcha_response_field").val() },
cache: false,
success: function (data, textStatus, xhr) {
isContinue = data === 'true';
},
error: function (xhr, st, err) {
alert("Sorry error occured, try again later.");
},
complete: function () {
alert(isContinue);//i could see that alert
if (isContinue) {
alert(isContinue); //i could see that alert
$("form").submit();
alert(isContinue); //i could see that alert
}
else {
return false;
}
}
});
});
});
</script>
<a class="button" id="register">Continue</a
Итак, если все проверки, включая capthca, пройдены, чем когда я нажимаю кнопку отправки, и форма не отправляется на сервер. Я проверил запрос с помощью chrome и opera network dev tools
, и они не показали это действие публикации, но в соответствии с предупреждениями, которые я поместил в javascript, форма должна быть опубликована.
Затем для теста я разместил еще одну простую кнопку отправки и отправил форму, поэтому по какой-то причине $("form").submit();
не хочет размещать форму.
Может быть, у кого-то есть идеи, что это может быть?
ОБНОВЛЕНИЕ
Я комментировал ajax post button
, когда пробовал simple post button
, но дело в у меня был еще один back button
:), который выглядит так:
<button name="submit" class="cancel" id="back" value="Back">
Так что проблема действительно в name="submit"
, я просто удалил это, и теперь все работает. Понадобится очень много времени, чтобы понять, что проблема только с name="submit"
, спасибо за помощь.
2 ответа
Это связано с тем, что кнопка, которую вы назвали submit
, переопределяет метод submit
в элементе form
, поэтому вместо form.submit
функции, отправляющей форму, теперь она ссылка на элемент button
.
Самый простой способ исправить это - переименовать ваш элемент button
.
Важно различать $('form').submit()
и form.submit()
. $('form').submit)
- это метод jQuery, на который не влияет кнопка с именем submit, однако за кулисами , jQuery вызывает атрибут submit
элемента actual HTMLForm
, на который влияет кнопка с именем submit
.
Об этом есть ошибка на http://bugs.jquery.com, однако, как описано выше, это не на самом деле проблема с самим jQuery.
У вашего кода есть другая проблема; вам не следует использовать $('form')
внутри обработчика кликов, так как он создает объект jQuery для всех форм на вашей странице; поэтому вы проверяете, что все формы действительны, и отправляете все формы. Вместо этого используйте $(this).closest('form')
Это действительная функция? Он возвращает false при отправке.
if (!$("form").valid())
return false;
Похожие вопросы
Новые вопросы
jquery
jQuery - это библиотека JavaScript, рассмотрите возможность добавления тега JavaScript. jQuery - это популярная кросс-браузерная библиотека JavaScript, которая облегчает прохождение Document Object Model (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться в рассматриваемом коде, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.