jQuery submit () и событие AJAX;Как я могу вызвать отправку обычной формы? - PullRequest
1 голос
/ 24 февраля 2012

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

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

Проблема заключается в том, как вызвать отправку формы.Если я просто использую .submit (), он снова отправляет форму в диалоговое окно.

$('#editAddr').submit(function(){
    var checkString = addrString();
    $.getJSON('/validate.php' + checkString, function(data){
        if(data == 0){
            var confw = '';
            confw += '<div><p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>';
            confw += 'Failed validation.</p></div>';

            var $dialog = $(confw).dialog({
                title: "Validation Problem",
                modal: true, resizable: false, width: 500,
                buttons: {
                    "Edit": function(){
                        $(this).dialog('close');
                    },
                    "Override": function(){
                        $(this).dialog('close');
                        $('#editAddr').submit();
                    }
                }
            });
        }else{
            $('#editAddr').submit();            
        }
    });

    return false;
});

Как правильно отправить эту форму с помощью нажатия кнопки диалога?

РЕДАКТИРОВАТЬ: Сделатьубедитесь, что ваша форма не содержит кнопку с id = "submit", или вы сломаете jQuery .submit ()

Ответы [ 5 ]

4 голосов
/ 25 февраля 2012

Вместо привязки к событию отправки в вашей форме, вместо этого привязайтесь к событию нажатия кнопки отправки. Таким образом, вы можете перехватить событие click события submit и вернуть false, когда вам нужно, или продолжить событие submit () в форме.

​$('input[type="submit"]').click(function(e){
    e.preventDefault();
    if() // invalid data
    {

    }
    else // good to go
    {
        $('form').submit();
    }
})​

Это решение также будет плохо работать, если кто-то отключит JavaScript. Некоторые другие решения, которые я читал, не позволяют этого.

1 голос
/ 25 февраля 2012

Ваша проблема в том, что вызов submit для объекта Jquery снова запускает его через jquery onsubmit.Как только вы закончите с валидатором, вам просто нужно вызвать его для объекта DOM - вы можете получить это с помощью

document.GetElementById(editAddr).submit();

или с

$("#editAddr").get(0).submit();

По крайней мере, этокак это работает с обработчиком отправки проверки.Я предполагаю, что он работает так же со стандартным обработчиком отправки.

1 голос
/ 25 февраля 2012

Просто позвоните .submit() в элемент dom формы.

Я думаю, вы можете получить его из jQuery следующим образом:

$('#editAddr')[0].submit();  // goes in your Override button logic
1 голос
/ 25 февраля 2012

Проблема связана с тем, как вы связали логику.

Ваша кнопка в форме должна быть обычной кнопкой, а не кнопкой отправки
, тогда ее свойство onaction должно указывать наметод выше.

после этого form.submit () должен работать как положено.

Другой вариант - добавить флаг к методу.

0 голосов
/ 25 февраля 2012

Добавьте что-то вроде логического значения isOverride или isValid, которое вы проверяете в начале функции отправки, чтобы обойти дальнейшую обработку.

...