Лучше делать это на уровне модуля, а не на уровне темы, так как в противном случае 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()
.
ОБНОВЛЕНИЕ Я создал проект песочницы для этого модуля.
delegate()
был добавлен в 1.4.2 и Drupal 7 с 1.4.4. Я почти уверен, что у меня это работает нормально на паре старых сайтов с установленным стоковым jQueryДля тех, кто в этой ситуации, попробуйте использовать модуль AutoUpload .
В настоящее время доступно для D6 и D7
источник
Drupal 6
Попробуйте что-то подобное в своем документе JQuery готов
Вставьте следующее в page.tpl или node.tpl
Я не знаю ни о каком способе Drupal для достижения этой цели.
играть на скрипке
источник
.ahah-processed
это имя класса Drupal 6, иclick()
метод по какой-то причине не вызывает нажатия на эти кнопки; вы должны использоватьmousedown()
вместо этого :)Вы можете достичь этого, используя
on()
.delegate()
был объявлен устаревшимисточник
Посмотрите на модуль интеграции Plupload .
источник
Если вы используете поле загрузки файла в форме AJAX - после ее отправки вы можете потерять функцию автоматической загрузки (см. Https://drupal.stackexchange.com/a/31453/7313 ).
Чтобы исправить - используйте этот скрипт
источник