JQuery Live представить осторожность в бесконечном цикле - PullRequest
0 голосов
/ 30 апреля 2011

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

$("#create-group-form").live('submit', function(e){
    e.preventDefault();
    var form = $(this);
    jConfirm('Here I display the group info...', 'Confirm Group', function(r){
        if ( r ) {
            form.submit();
        }
    });
});

Я использую плагин jAlert для jQuery, но он работает так же, как обычное приглашение Confirm с другим стилем, и проблема заключается в том, что когда пользователь нажимает Ok в приглашении, он снова переходит в живую отправку, застревая в бесконечном цикле.

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

Кстати, я использую live submit, потому что форма находится в модальном окне.

Заранее спасибо!

Ответы [ 3 ]

9 голосов
/ 30 апреля 2011

Вызовите метод submit элемента формы, а не метод выбора jQuery.Это означает, что обработчик jQuery не будет запущен:

$("#create-group-form").live('submit', function(e){
    e.preventDefault();
    var form = this; // <-- this line changed
    jConfirm('Here I display the group info...', 'Confirm Group', function(r){
        if ( r ) {
            form.submit();
        }
    });
});
1 голос
/ 30 апреля 2011

Это отвяжет ваш обработчик событий, прежде чем вы снова вызовете submit().

$("#create-group-form").live('submit', function(e){
    e.preventDefault();
    var form = $(this);
    jConfirm('Here I display the group info...', 'Confirm Group', function(r){
        if ( r ) {
            form.unbind('submit');
            form.submit();
        }
    });
});
0 голосов
/ 30 апреля 2011

Замените кнопку отправки в форме тегом button с идентификатором, подобным #psuedo-submit. При нажатии #psuedo-submit откройте модальное окно и выполните фактическую отправку при подтверждении.

...