Как отправить форму после проверки JQuery Ajax? - PullRequest
2 голосов
/ 20 июня 2011

Я не могу заставить работать функцию jsery .submit (). Я свел все в своем коде к следующему:

  <form action="/server/addserver.php" method="post" accept-charset="utf-8" id="mainform"><input type="text" name="test" value=""  /><input type="submit" name="submit" value="Submit" id="submitbutton" /></form>

<script type="text/javascript">
    $("#submitbutton").click(
    function(){
         $("#mainform").submit();
             return false;
    });
</script>

Мне кажется, это должно 1 - остановить поведение по умолчаниюЗатем нажмите кнопку 2 - вручную отправьте форму.

Если я поменяюсь .submit ();с .hide ();это работает.Разве это не предпочтительный способ отправки формы вручную после первого запуска проверки AJAX?

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Вы можете сделать:

$(function () {
    $('#mainform').submit(function () {
        if (isFormValid()) { // do your validation
            return true;
        }
        return false;
    });
});

Это будет работать при отправке формы (просто используйте обычную кнопку <input type="submit" />). Если вы вернете значение false, страница не будет опубликована.

Если вы хотите привязать событие к вашей кнопке, попробуйте это так:

$(function () {
    $('#submitbutton').click(function () {
        if (isFormValid()) { // do your validation
            $('#mainform').submit();
        }
        return false;
    });
});
2 голосов
/ 20 июня 2011

Во-первых, есть пара вещей, о которых вы должны знать:

  1. Каждый раз, когда вы хотите привязать событие к элементу DOM сразу, вам следует убедиться, что страница полностью загружена. Если вы сомневаетесь, оберните ваш код внутри

    $(document).ready(function() { /* code to execute after page load */ });
    .
  2. Кроме того, метод .trigger ("submit") не работает, если установлен атрибут name элемента input [type = "submit"] на значение «представить». Поскольку .submit () , вызываемый без аргументов, является ярлыком для .trigger ('submit') , тогда каждый раз, когда вы вызываете метод JQuery .submit () для элемент, который вы хотите убедиться, и присвоить входному параметру name атрибут, отличный от «submit».

Теперь, чтобы ответить на ваши вопросы; Сначала о том, является ли возврат false предпочтительным способом отправки формы вручную, обычно ответ отрицательный. Причина в том, что возвращение false делает три вещи, и вы обычно не хотите делать все из них. Он предотвращает поведение браузера по умолчанию для этого события, также останавливает всплывающее событие и сразу же завершает работу, выходя из функции. Обычно, вы, вероятно, просто хотите либо event.preventDefault () , либо event.stopPropagation () … или даже отменить привязку к событию в целом. В этом случае, на мой взгляд, возврат false, а не вызов соответствующих вечерних методов, похоже, запутывает смысл вашего кода.

Если вам также нужно запретить действие браузера по умолчанию для события submit , вы можете использовать альтернативный метод запуска JQuery:

$('#mainform').triggerHandler('submit');
. Хотя сам метод валидатора, вероятно, должен быть там, где вы вызываете form.submit () в случае, если ошибок нет. Он также должен быть там, где вы обрабатываете отправку формы, так как это, так сказать, привратник.

В общем, если вы собираетесь использовать плагин Validator, вы должны следовать его собственным соглашениям. Убедитесь, что форма выполняет отправку по умолчанию, добавив name = "submit" к кнопке отправки, а затем удалите весь имеющийся у вас код JQuery и замените его следующим примером из документации Validator:

$("#mainform").validate({
 submitHandler: function(form) {
   form.submit(); // Don't use a JQuery selector here, just "form"
 }
});

Это должно позволить плагину работать должным образом. Конечно, последним шагом будет добавление ваших правил проверки. Надеюсь, это поможет. Если у вас все еще есть проблемы с обработкой событий, попробуйте использовать методы объекта Event в JQuery для отладки на консоли.

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