Лучший способ временно отключить отправку ajax на плагин ajaxForm - PullRequest
3 голосов
/ 25 января 2012

Я использую плагин jQuery malsup ajaxForm в форме. У меня есть куча POST-переменных, которые отправляются, и это работает нормально, я хочу использовать те же самые post-переменные для выполнения опции экспорта в файл. Это означает использование одной и той же формы для обоих типов представления.

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

После этого отмены привязки мне нужно повторно запустить конструктор ajaxForm, когда пользователь хочет изменить фильтры с помощью AJAX (не для экспорта).

Прежде чем тратить больше времени на исправление крайних случаев и пару ошибок, я подумал, есть ли более чистый способ сделать это?

Ответы [ 2 ]

1 голос
/ 22 августа 2012

Используйте пользовательские события и trigger()!

Во-первых, поместите переключатель в форму, чтобы пользователь мог переключаться между AJAX / Экспорт в файл. Допустим, имя этого поля submitAction

Во-вторых, ваш подчиненный слушатель действует только для того, чтобы решить, что будет дальше, основываясь на значении submitAction радио. Здесь вы запускаете пользовательские события (мы определяем их на шаге 3):

$('form.specialform').on('submit',function(e){
    e.preventDefault();
    var checked = $(this).closest('[name="submitAction"]').filter(':checked');
    if(checked.val() == 'ajax'){ //ajax!
        $(this).trigger('submitAJAX');
    } else { //export to file!
        $(this).trigger('submitExport');
    }
});

В-третьих, определите ваши пользовательские события с помощью двух прослушивателей:

$('form.specialform').on('submitAJAX',function(e){
    //do AJAX call here
});

$('form.specialform').on('submitExport',function(e){
    //do file export here
});

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

Это помогает?

0 голосов
/ 28 февраля 2014

Большое спасибо Джонатану за ответ выше.Мы тоже столкнулись с подобной проблемой, и запуск пользовательских событий помог нам.Также я хотел бы добавить, что если используется malsup ajaxForm плагин , мы должны вызвать ajaxSubmit вместо ajaxForm, поскольку ajaxForm не отправляет форму.

    $('form.specialForm').on('submitAJAX',function(e) {
        $(this).ajaxSubmit({
           target: '#query_output', 
           beforeSubmit:  showLoading,
           success:       hideLoading
       });
   });
...