3

フォームでjQuery malsup ajaxForm プラグインを使用しています。送信される一連の POST vars があり、これは正常に機能しています。同じ post vars を使用して、ファイルへのエクスポート オプションを実行したいと考えています。これは、両方の提出タイプに同じフォームを使用することを意味します。

AJAX 送信を介してファイルをダウンロードできないため.unbind('submit').submit()、フォームで使用して、以前に割り当てられた ajax イベント ハンドラーが起動しないようにしています。

このバインド解除が発生した後、ユーザーが (エクスポートではなく) AJAX を使用してフィルターを変更したい場合は、ajaxForm コンストラクターを再実行する必要があります。

エッジケースといくつかのバグの修正にもっと時間を費やす前に、これを行うためのよりクリーンな方法があるかどうか疑問に思いました。

4

2 に答える 2

1

カスタムイベントを使用して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');
    }
});

3番目に、2つのイベントリスナーを使用してカスタムイベントを定義します。

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

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

ご覧のとおり、このようにすることで、同じイベントハンドラーを何度もバインド解除して再バインドするという混乱を回避できます。

それは役に立ちますか?

于 2012-08-22T01:56:12.107 に答える