Jquery Form Plugin を使用して Ajax 経由でデータを送信していますが、問題はありません。プログレスバーもうまく実装しました。
フォームにタグ enctype="multipart/form-data" がある場合にのみ進行状況バーを表示したいのですが、AjaxForm オブジェクト内のフォーム属性を読み取るのに問題があります。
$('.form_to_main').ajaxForm({
delegation: true,
target: '#main_content',
beforeSend: function(arr, myform, options) {
_is_loading = true;
$('#loading').fadeIn();
//here something like if($(myform).attr("enctype") != '')
$('#loading .progress_bar .bar_container .bar').width('0%')
$('#loading .progress_bar .percent').html('0%');
//else $('#loading .progress_bar).hide();
},
beforeSubmit: function() {
if (_is_loading) return false;
},
uploadProgress: function(event, position, total, percentComplete) {
$('#loading .progress_bar .bar_container .bar').width(percentComplete + '%')
$('#loading .progress_bar .percent').html(percentComplete + '%');
},
error: function(xhr) {
BoxErrorShow('Connection error: ' + xhr.status + ' ' + xhr.statusText);
$('#loading').hide();
_is_loading = false;
},
success: function() {
$('#loading .progress_bar .bar_container .bar').width('100%')
$('#loading .progress_bar .percent').html('100%');
$('#loading').hide();
_is_loading = false;
}
});
});
beforeSend: メソッドで enctype 属性を確認したいのですが、フォームオブジェクトにアクセスする方法がわかりません。
ご支援ありがとうございます
更新 - 解決済み beforeSend 関数で beforeSubmit パラメータを使用します。したがって、正しいコードは次のとおりです。
$('.form_to_main').ajaxForm({
delegation: true,
target: '#main_content',
beforeSend: function() {
_is_loading = true;
$('#loading').fadeIn();
$('#loading .progress_bar .bar_container .bar').width('0%')
$('#loading .progress_bar .percent').html('0%');
},
beforeSubmit: function(arr, myform, options) {
if ($(myform).attr("enctype") == 'multipart/form-data') $('#loading .progress_bar').show();
if (_is_loading) return false;
},
uploadProgress: function(event, position, total, percentComplete) {
$('#loading .progress_bar .bar_container .bar').width(percentComplete + '%')
$('#loading .progress_bar .percent').html(percentComplete + '%');
},
error: function(xhr) {
BoxErrorShow('Connection error: ' + xhr.status + ' ' + xhr.statusText);
$('#loading').hide();
_is_loading = false;
},
success: function() {
$('#loading .progress_bar .bar_container .bar').width('100%')
$('#loading .progress_bar .percent').html('100%');
$('#loading .progress_bar').hide();
$('#loading').hide();
_is_loading = false;
}
});
});