Drupal ดูเหมือนจะไม่ป้องกันการส่งหลายรูปแบบแม้ในหน้าโหนด QAนี้แนะนำให้แก้ไขทางฝั่งเซิร์ฟเวอร์
ฉันจะปิดการใช้งานปุ่มส่งหลังจากคลิกได้อย่างไร
ทางออกอื่น ๆ
Drupal ดูเหมือนจะไม่ป้องกันการส่งหลายรูปแบบแม้ในหน้าโหนด QAนี้แนะนำให้แก้ไขทางฝั่งเซิร์ฟเวอร์
ฉันจะปิดการใช้งานปุ่มส่งหลังจากคลิกได้อย่างไร
ทางออกอื่น ๆ
คำตอบ:
มันมีเฉพาะใน dev เท่านั้น แต่โมดูลHide Submitจะทำการหลอกลวง หนึ่งในคุณสมบัติคือ:
ซ่อน (หรือปิดใช้งาน) ปุ่มส่งหลังจากคลิกแล้ว
ฉันเพิ่งติดตั้งบนไซต์ dev และดูเหมือนว่าจะทำงานได้ดีสำหรับโหนดเพิ่มฟอร์ม เมื่อคุณคลิกปุ่มส่งปุ่มนี้จะถูกซ่อนและถูกแทนที่ด้วยรูปภาพการโหลดและข้อความ 'โปรดรอ ... ' ก่อนที่จะส่งแบบฟอร์มในที่สุด ฉันยังไม่ได้ลองในรูปแบบอื่น ๆ
hook_form_alter()
- ถ้ามันใช้สลับไปยังทั่วไปhook_form_FORMID_alter()
hook_form_alter()
ถ้ามันเป็นทั่วไปhook_form_alter()
ด้วยถ้าภายในเพิ่มบางor
's if
ในเรื่องนี้
นี่คือวิธีแก้ปัญหาสำหรับ Drupal 7 รหัสนั้นเป็นเวอร์ชั่นที่ง่ายกว่าของโมดูล Hide Submit
รหัสนี้ใช้งานได้ดีแม้ใช้ปุ่ม "เพิ่มมากขึ้น" และแบบฟอร์ม AJAX
Drupal.behaviors.hideSubmitButton = {
attach: function(context) {
$('form.node-form', context).once('hideSubmitButton', function () {
var $form = $(this);
$form.find('input.form-submit').click(function (e) {
var el = $(this);
el.after('<input type="hidden" name="' + el.attr('name') + '" value="' + el.attr('value') + '" />');
return true;
});
$form.submit(function (e) {
if (!e.isPropagationStopped()) {
$('input.form-submit', $(this)).attr('disabled', 'disabled');
return true;
}
});
});
}
};
วิธีที่ง่ายที่สุดคือการทำโซลูชันจาวาสคริปต์ที่ใช้ธีมเพื่อปิดใช้งานปุ่มหลังจากการส่งแบบฟอร์ม ในไฟล์ theme.info วางไฟล์ javascript ของคุณเพื่อให้สามารถโหลดได้โดยธีม api
scripts[] = js/themename-script.js
ตอนนี้ใน themename-script.js เพิ่มไปยังส่วน Drupal.behaviors.themename ให้มีลักษณะดังนี้:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
ดังนั้นการไหลจะเป็นดังนี้:
ฉันแน่ใจว่ามีการประมวลผล ajax ที่ข้างต้นอาจเป็นอันตรายและการส่งแบบฟอร์มไม่สามารถทำได้อีกครั้งหากมีข้อผิดพลาดในการตรวจสอบ form_api ตรวจสอบเพื่อทดสอบและปรับแต่งเพื่อตอบสนองความต้องการของคุณ ฉันปิดการใช้งานทั้งสองปุ่มเนื่องจากคุณยังสามารถคลิกปุ่มแสดงตัวอย่างในขณะที่ปุ่มส่งถูกปิดใช้งาน เห็นได้ชัดว่าระยะทางของคุณแตกต่างกันไป
Drupal.behaviors
รูปแบบการประกาศแบบเก่า มันจะไม่ทำงานสำหรับ Drupal 7 Drupal.behaviors.themename = { attach: function (context, settings) { // ...
มันจะต้อง ดูการจัดการ JavaScript ใน Drupal 7สำหรับข้อมูลเพิ่มเติม