JQuery отправить внутри проверки создает слишком много рекурсии - PullRequest
1 голос
/ 11 октября 2010

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

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

     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 (Ok: function() {$( this ).dialog( "close" ); $('#bookForm').submit();},), потому что при повторной отправке формы я получаю ошибку «слишком много рекурсии».

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

Ответы [ 2 ]

1 голос
/ 11 октября 2010

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

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

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

1 голос
/ 11 октября 2010

Вам нужна вся проверка и диалог, чтобы работать как единое целое. Поэтому, когда нажимается кнопка «Отправить», включается проверка JavaScript, и диалог отображается сразу. Тогда диалог действует как последний шаг в процессе валидации.

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

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

...