คุณควรทำสิ่งนี้ในระดับโมดูลแทนที่จะเป็นระดับธีมเนื่องจาก 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-ified (เช่นที่มีปุ่ม 'อัปเดต') จะได้รับผลกระทบ ... คุณไม่จำเป็นต้องกดปุ่ม 'อัปโหลด' อีกต่อไปหลังจากเลือกไฟล์แล้ว .
โดยใช้delegate()
วิธีการนี้จะทำงานได้อย่างสมบูรณ์แบบสำหรับเขตข้อมูลไฟล์ที่อนุญาตให้อัปโหลดหลายครั้งและสำหรับเขตข้อมูลที่โหลดลงในหน้าอันเป็นผลมาจากการร้องขอ AJAX
ฉันได้ทำการทดสอบแล้วใน Chrome, Safari และ Firefox และใช้งานได้ดี :)
เชิงอรรถ : ใน (อาจจะไม่น่ามาก) เหตุการณ์ที่เว็บไซต์ของคุณใช้ jQuery 1.7 คุณควรใช้on()
วิธีการซึ่งได้ delegate()
superseeded
UPDATEฉันได้สร้างโครงการ sandboxสำหรับโมดูลนี้