Sería mejor hacer esto en el nivel del módulo, en lugar del nivel del tema, ya que el JS no tendrá efecto para las páginas de administración de lo contrario (a menos que, por supuesto, esté usando el mismo tema para ambos).
Aquí hay un pequeño módulo para proporcionar esta funcionalidad en todo el sistema:
Archivo: auto_upload.info
name = Auto Upload
description = Removes the need for users to press the 'Upload' button for AJAX file uploads.
core = 7.x
dependencies[] = file
Archivo: auto_upload.js:
(function ($) {
Drupal.behaviors.autoUpload = {
attach: function (context, settings) {
$('form', context).delegate('input.form-file', 'change', function() {
$(this).next('input[type="submit"]').mousedown();
});
}
};
})(jQuery);
Archivo: auto_upload.module
function auto_upload_init() {
drupal_add_js(drupal_get_path('module', 'auto_upload') . '/auto_upload.js');
}
Una vez que haya instalado el módulo, se verán afectadas todas las entradas de archivos que tengan AJAX (es decir, aquellas que tengan un botón 'Actualizar') ... ya no tendrá que presionar el botón 'Cargar' después de seleccionar el archivo .
Al usar el delegate()
método, esto también funcionará perfectamente para los campos de archivo que permiten múltiples cargas, y también para los campos que se cargan en la página como resultado de una solicitud AJAX.
Lo probé en Chrome, Safari y Firefox y funciona de maravilla :)
Nota al pie : en el caso (probablemente muy poco probable) de que su sitio esté usando jQuery 1.7, debe usar el on()
método, que ha sido reemplazado delegate()
.
ACTUALIZACIÓN He creado un proyecto de sandbox para este módulo.