Выполнить действие перед отправкой формы? - PullRequest
30 голосов
/ 24 мая 2011

У меня есть эта HTML-форма с идентификатором, и я связал этот идентификатор с функцией отправки.То, что я хочу, - когда пользователь нажимает кнопку «Отправить», появляется всплывающее окно, как модальное окно, поблагодарив их.И только после того, как они щелкают по экрану или когда закрывается модальное окно, я хочу, чтобы форма отправляла и обновляла страницу.

Но то, что у меня есть сейчас, похоже, обновится несмотря ни на что.Я использую модный всплывающий плагин для модального окна.

<form action="submit-comment.php" method="post" id="form">
<input type="text" name="comment" />
<input type="submit" name="submit" value="Submit" />
</form>

jQuery("#form").submit(function() {
     jQuery.fancybox('<div class="box">Some content</div>', {
           'onClosed' : function() { return true; }
            }     
     });
});

Как вы можете видеть, я пытаюсь сказать ему, что он возвращает true только при закрытии, но на самом деле он не работает.* Есть идеи?

Ответы [ 2 ]

60 голосов
/ 24 мая 2011

Попробуйте это:

jQuery("#form").submit(function(e) {
     var self = this;
     e.preventDefault();
     jQuery.fancybox('<div class="box">Some amazing wonderful content</div>', {
           'onClosed' : function() { 
                          self.submit();
                        }
     });
     return false; //is superfluous, but I put it here as a fallback
});

JavaScript является асинхронным, поэтому вы не можете отложить инструкцию возврата.


UPDATE

Чтобы сделать так, чтобы приведенный выше код работал, замените name вашей кнопки отправки на что-то другое, например:

<input type="submit" name="submit_me" value="Submit" />
2 голосов
/ 26 сентября 2013

(ответ на вопрос Рика под ответом Нила: «Любой другой путь? Потому что у меня нет прямого доступа к этому html»)

Если вам по какой-то причине нужнокнопка подтверждения имеет идентификатор = "отправить" и не может использовать метод form.submit (поскольку она ссылается на кнопку "input [type = submit] #submit"), вы можете сделать это:

$('<form>')[0].submit.call(form); //jQuery
//OR:
document.createElement('form').submit.call(form); //pure HTML w/o any framework

т.е. создатьновую пустую форму и используйте метод submit для вызова ее в области действия вашей собственной формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...