Лучше делать это на уровне модуля, а не на уровне темы, так как в противном случае JS не будет действовать для страниц администратора (если, конечно, вы не используете одну и ту же тему для обоих).
Вот небольшой модуль для обеспечения этой функциональности в масштабе всей системы:
Файл: 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
Файл: 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);
Файл: auto_upload.module
function auto_upload_init() {
drupal_add_js(drupal_get_path('module', 'auto_upload') . '/auto_upload.js');
}
После того, как вы установили модуль, будут затронуты все файловые входы, которые имеют AJAX-формат (т. Е. Те, которые имеют кнопку «Обновить») ... вам больше не нужно нажимать кнопку «Загрузить» после выбора файла ,
Используя этот delegate()
метод, он также отлично подойдет для файловых полей, допускающих многократную загрузку, а также для полей, которые загружаются на страницу в результате запроса AJAX.
Я проверял это в Chrome, Safari и Firefox, и это работает удовольствие :)
Сноска . В (вероятно, очень маловероятном) случае, когда ваш сайт использует jQuery 1.7, вы должны использовать on()
метод, который заменил его delegate()
.
ОБНОВЛЕНИЕ Я создал проект песочницы для этого модуля.