7

変更されたすべてのフォームを検出し、それぞれをAjax投稿として送信する関数で、JQueryの遅延メソッドをどのように使用できるかについてのアイデアはありますか?

大量のフォーム送信をリストするだけでも同じことが機能しますが、使用する場合は...

$('form.changed').each(function(){
  return $(this).submitWithAjax();
});

私が機能させようとしているコードのより完全なバージョンはここにあります... JSフィドルで

前もって感謝します!

4

2 に答える 2

17

「.each()」の代わりに「.map()」を使用します。

var deferreds = $('form.changed').map(function(i, elem) {
  return $(this).submitWithAjax();
});

$.when.apply(null, deferreds.get()).then(function() { ... });

「$.when()」を使用すると、多数の遅延オブジェクトをまとめて、すべてが成功するのを待つことができます(または、いずれかが失敗するのを待つことができます。違いに注意してください)。通常は任意の数の引数を使用できますが、配列があるため、「apply()」を使用しました。

私はこれを軽く使用しただけなので、jQuery APIドキュメントを読んで再確認してください:-)編集—また、質問を読み直したときに、誤解した可能性があります。

于 2011-05-28T16:40:04.867 に答える
0

変更イベントをフォームフィールドに委任すると、ここで問題を解決できる可能性があります。

$('form').delegate('input[type=text], input[type=radio], select', 'change', 
function(evt){
    // your submits here
    console.log('changed!')
});
于 2011-05-28T16:46:33.947 に答える