Lepiej byłoby zrobić to na poziomie modułu, niż na poziomie motywu, ponieważ JS nie zadziała inaczej na stronach administracyjnych (chyba że używasz tego samego motywu dla obu).
Oto mały moduł zapewniający tę funkcjonalność w całym systemie:
Plik: 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
Plik: 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);
Plik: auto_upload.module
function auto_upload_init() {
drupal_add_js(drupal_get_path('module', 'auto_upload') . '/auto_upload.js');
}
Po zainstalowaniu modułu wpłynie to na wszystkie pliki wejściowe, które są obsługiwane przez AJAX (tj. Te, które mają przycisk „Aktualizuj”) ... nie będziesz już musiał naciskać przycisku „Prześlij” po wybraniu pliku .
Dzięki tej delegate()
metodzie będzie to również idealnie działać w przypadku pól plików, które umożliwiają wielokrotne przesyłanie, a także pól, które są ładowane na stronę w wyniku żądania AJAX.
Przetestowałem to w Chrome, Safari i Firefox i działa to na dobre :)
Przypis : W (prawdopodobnie bardzo mało prawdopodobnym) zdarzeniu, że Twoja witryna korzysta z jQuery 1.7, powinieneś użyć on()
metody, która zastąpiła delegate()
.
AKTUALIZACJA Stworzyłem projekt piaskownicy dla tego modułu.