Bạn nên làm điều này tốt hơn ở cấp độ mô-đun, thay vì cấp độ chủ đề, vì JS sẽ không có hiệu lực đối với các trang quản trị (trừ khi tất nhiên bạn đang sử dụng cùng một chủ đề cho cả hai).
Đây là một mô-đun nhỏ để cung cấp chức năng này cho toàn hệ thống:
Tệp: 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
Tệp: 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);
Tệp: auto_upload.module
function auto_upload_init() {
drupal_add_js(drupal_get_path('module', 'auto_upload') . '/auto_upload.js');
}
Khi bạn đã cài đặt mô-đun, tất cả các đầu vào tệp là AJAX-ified (tức là những đầu vào có nút 'Cập nhật') sẽ bị ảnh hưởng ... bạn sẽ không cần nhấn nút 'Tải lên' nữa sau khi chọn tệp .
Bằng cách sử dụng delegate()
phương thức này, nó cũng sẽ hoạt động hoàn hảo cho các trường tệp cho phép nhiều tải lên và cũng cho các trường được tải vào trang do kết quả của yêu cầu AJAX.
Tôi đã thử nghiệm điều đó trong Chrome, Safari và Firefox và nó hoạt động rất tốt :)
Lưu ý : Trong trường hợp (có lẽ rất khó xảy ra) rằng trang web của bạn đang sử dụng jQuery 1.7, bạn nên sử dụng on()
phương thức đã được siêu thực delegate()
.
CẬP NHẬT Tôi đã tạo một dự án hộp cát cho mô-đun này.