jquery submit внутри проверки создает слишком много рекурсии

потому что так, как работают диалоги jquery, при использовании диалогового окна «подтверждение» вы должны немедленно вернуть false, и если пользователь выберет «ОК», затем инициируйте отправку формы.

Итак, я использую этот код:

     function validoForm()
    {
//some code here...
        if (datosTdcIncompletos==true)
        {
            var $dialogTDC= $('<div></div>')
            .html("TDC information incomplete\n\rDo you want to continue?")
            .dialog({
                autoOpen: false,
                modal:true,
                title: 'Confirm',
                buttons: {
                    Ok: function() {$( this ).dialog( "close" ); $('#bookForm').submit();},
                    Cancel: function() {$( this ).dialog( "close"); return false;}
                }

            });
            $dialogTDC.dialog('open');
            return false;


        }
        $('#bookForm').submit();
    }

и

<script type="text/javascript">
    $(document).ready(function() {

        $('#submitBtn').click(function (){ $('#bookForm').submit();});

        var options1 = {
                  target: '#bookForm', 
                  url: 'http://localhost/include/processForm.php',
                  type:'post', 
                  beforeSubmit:validoForm, 
                  success: showResponse
                  };
        $('#bookForm').ajaxForm(options1); 

    });
</script>

Проблема возникает из-за функции кнопки «ОК» (Ok: function() {$( this ).dialog( "close" ); $('#bookForm').submit();},), потому что она снова отправляет форму, и я получаю ошибку «слишком много рекурсии».

как это сделать?


person Alex Angelico    schedule 10.10.2010    source источник


Ответы (2)


Ваш обработчик кликов submitBtn должен просто запустить метод проверки (и вернуть false, чтобы предотвратить механизм по умолчанию).

Тогда ваш метод проверки должен вызывать submit только тогда, когда пользователь подтверждает OK.

Вам также необходимо удалить последний $('#bookForm').submit(); в вашем методе проверки, который вызывается все время.

person Ben    schedule 10.10.2010
comment
проблема в том, что я хочу использовать диалог jquery для диалога подтверждения. Это не модально (проверьте комментарий к ответу Саймона). Ваш способ работает с типичной функцией подтверждения js, но выглядит некрасиво. Должен быть какой-то способ заставить диалог jquery работать... - person Alex Angelico; 11.10.2010
comment
@Алехандро. Нет, я говорю, используя диалог jquery ui. - person Ben; 11.10.2010
comment
Когда нажата кнопка отправки, запустите проверку, и ТОЛЬКО при нажатии кнопки «ОК» отправьте форму. - person Ben; 11.10.2010
comment
и избавьтесь от последнего $('#bookForm').submit(); в вашем методе проверки это приводит к тому, что форма публикуется независимо от того, что - person Ben; 11.10.2010
comment
Бен, вы абсолютно правы, я переписал весь код, и теперь он работает. Я пробовал этот подход раньше, но, похоже, я сделал что-то не так. Большое спасибо. - person Alex Angelico; 11.10.2010

Вам нужно, чтобы вся проверка и диалог работали как единое целое. Поэтому, когда нажимается кнопка отправки, срабатывает проверка javascript, и диалог отображается сразу. Затем диалог действует как последний шаг в процессе проверки.

Таким образом, в конце вашего метода проверки вы должны вернуть значение, возвращенное из диалога, или вернуть true (при условии, что диалог показывает, когда форма неполная).

Это также означает удаление события click на кнопке отправки, иначе вы просто зациклитесь, как вы видели.

person Simon    schedule 10.10.2010
comment
проблема с этим подходом заключается в том, что вы не можете ждать, пока пользователь подтвердит диалог. Формы продолжают обрабатываться, потому что диалоговое окно jquery не является модальным (даже с опцией modal:true). stackoverflow .com/questions/3844241/ - person Alex Angelico; 11.10.2010