У меня есть форма, в которой раньше я использовал простой пост с <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", спасибо за помощь.

1
Joper 26 Авг 2011 в 12:25

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')

2
Matt 26 Авг 2011 в 08:34

Это действительная функция? Он возвращает false при отправке.

    if (!$("form").valid())
        return false;
0
TROODON 26 Авг 2011 в 08:28