「AJAXを使用してファイルをアップロードできない」問題の回避策を実装しています(要するに、フォームはiframeをターゲットにしており、jQueryでiframeのコンテンツを取得して処理したい)。
現時点では、フォームが送信されるたびに呼び出される送信ハンドラーがあります。フォームにファイル アップロード フィールドがあるかどうかを判断し、ある場合はバインドを解除して submit() を呼び出します。残念ながら、submit() は、カスタム ハンドラーが false を返すまで実際にはトリガーされません。したがって:
$('form').livequery('submit.custom', function() {
if ($(this).has('input[type=file]').length != 0) {
$(this).unbind('submit.custom');
$('body').append('<div id="file_iframe"></div>');
$('#file_iframe').append('<iframe name="postframe" id="postframe" class="hidden" src="" />');
$(this).attr("target", "postframe");
$(this).submit(); // <-- Doesn't trigger until after 'return false;'
}
return false;
});
これは、iframe 内のデータを処理できないことを意味します。代わりに、現在のカスタム ハンドラー内に新しいカスタム ハンドラーをバインドすることを考えていました (まだ混乱していますか?)。これは (おそらく) 現在のハンドラーが false を返した後にトリガーされたものになりますが、デフォルトをトリガーするにはその新しいハンドラーが必要です。アクションを送信してから処理を続行してください。これを行う方法、または考えられる問題を回避する方法はありますか?
$('form').submit(function() {
// Do something to trigger default action, ie actually post the form
// Then do some other bits and pieces
});
どんな助けにも感謝します!