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.
delegate()
dodano w 1.4.2 i Drupal 7 jest dostarczany z 1.4.4. Jestem całkiem pewien, że mam to dobrze na kilku starych stronach z zainstalowanym standardowym jQueryDla każdego w tej sytuacji spróbuj użyć modułu AutoUpload .
Jest obecnie dostępny dla D6 i D7
źródło
Drupal 6
Wypróbuj coś takiego w gotowym dokumencie jQuery
Wklej następujące elementy w page.tpl lub node.tpl
Nie znam żadnego sposobu Drupala na osiągnięcie tego.
skrzypce
źródło
.ahah-processed
jest nazwą klasy Drupal 6, aclick()
metoda z jakiegoś powodu nie wywołuje kliknięcia tych przycisków; musisz użyćmousedown()
zamiast tego :)Możesz to osiągnąć za pomocą
on()
.delegate()
został wycofany.źródło
Spójrz na moduł integracji Plupload .
źródło
Jeśli korzystasz z pola przesyłania plików w formularzu AJAX - po jego przesłaniu możesz utracić funkcję automatycznego przesyłania (patrz https://drupal.stackexchange.com/a/31453/7313 )
Aby naprawić - użyj tego skryptu
źródło