5

我得到了一个只有一个字段的表格。该字段属于“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/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 回答