Используйте пользовательские события и 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
});
Как вы можете видеть, выполнение этого способа позволяет избежать беспорядка, связанного с повторным связыванием и повторным связыванием одних и тех же обработчиков событий.
Это помогает?