5

フィールドが 1 つしかないフォームを取得しました。このフィールドのタイプは「managed_field」です。[アップロード] ボタンをクリックすると、プログレス バーにファイルのアップロードの進行状況が表示されます。その後、フォームを送信してファイルを保存する必要があります。

ファイルを選択して [アップロード] ボタンの代わりにフォーム送信ボタンをクリックすると、プログレス バーが表示されないためです。アップロード ([アップロード] ボタンを使用) が完了した後に、フォームの送信をトリガーしたいと考えています。

私の現在のフォームは次のようになります。

$form['#attributes'] = array('enctype' => "multipart/form-data");

$form['pdf_upload'] = array(
    '#title' => t('Upload PDF'),
    '#type' => 'managed_file',
    '#required' => TRUE,
    '#progress_message' => t('Please wait...'),
    '#progress_indicator' => 'bar',
    '#upload_validators' => array(
        'file_validate_extensions' => array('pdf'),
    )

);

$form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
);

file モジュールは、file/ajax/* uri への ajax コールバックを介してファイルを処理します。コールバックは ajax コマンドを返します。

基本的に、ファイルのアップロードが完了した後にフォームの送信をトリガーする ajax コマンドを追加したいと考えています。

4

1 に答える 1

2

@Cliveユーザーに自分でアップロードを開始してもらいたかったので、それは私にとって選択肢ではありませんでした。あなたの答えは私にいくつかのアイデアを与えてくれました、そして私は次の解決策を思いつきました.

Drupal.behaviors.fileUpload = {
    attach: function(context, settings) {
        jQuery("body").ajaxComplete(function(event,request, settings){
            // Only do something when on the orders page of a user
            // This is where I use the upload functionality
            if(window.location.pathname.match(/user\/\d+\/orders/)) {
                // Check if the AjaxComplete was triggered by the managed file upload
                // pdf_upload_XXX is my form name
                // Get the form-build-id from the URL
                if (form_build_id = settings.url.match(/file\/ajax\/pdf_upload_\d*\/(.*)$/)) {
                    // Check if the upload has completed by checking if there is a Delete button in the form that has the form-build-id
                    if(jQuery('[value="'+form_build_id[1]+'"]').closest('form').find('[id$=remove-button]').length) {
                        // Click the submit button
                        jQuery('[value="'+form_build_id[1]+'"]').closest('form').find('[id^=edit-submit]').click();
                    }
                }
            }   
        });

    }
}

これが他のユーザーにも役立つことを願っています。

私を正しい道に導いてくれたThnx Clive。

于 2012-08-03T07:37:51.380 に答える