Drupal dường như không ngăn chặn nhiều hình thức gửi, ngay cả trên các trang nút. QA này đề nghị sửa nó ở phía máy chủ.
Làm thế nào tôi có thể vô hiệu hóa nút gửi sau khi nhấp vào?
Bất kỳ giải pháp nào khác?
Drupal dường như không ngăn chặn nhiều hình thức gửi, ngay cả trên các trang nút. QA này đề nghị sửa nó ở phía máy chủ.
Làm thế nào tôi có thể vô hiệu hóa nút gửi sau khi nhấp vào?
Bất kỳ giải pháp nào khác?
Câu trả lời:
Chỉ có trong dev nhưng mô-đun Hide Gửi sẽ thực hiện thủ thuật. Một trong những tính năng là:
Ẩn (hoặc vô hiệu hóa) nút gửi sau khi đã nhấp vào
Tôi vừa cài đặt nó trên một trang dev và nó dường như hoạt động tốt cho các biểu mẫu thêm nút; Khi bạn nhấp vào nút gửi, nó sẽ bị ẩn và được thay thế bằng hình ảnh đang tải và thông báo 'Vui lòng đợi ...', trước khi biểu mẫu cuối cùng được gửi. Tôi đã không thử nó trên bất kỳ hình thức khác mặc dù.
hook_form_alter()
- nếu nó đang sử dụng hook_form_FORMID_alter()
, hãy chuyển nó thành chung chung hook_form_alter()
. Nếu nó là chung hook_form_alter()
với nếu bên trong, thêm một số or
trong này if
.
Đây là giải pháp cho Drupal 7. Mã là phiên bản đơn giản của mô-đun Hide Gửi.
Mã này hoạt động tốt ngay cả với các nút "Thêm" và biểu mẫu 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;
}
});
});
}
};
Cách dễ nhất là thực hiện một giải pháp javascript dựa trên chủ đề để vô hiệu hóa nút sau khi gửi biểu mẫu. Trong tệp theme.info, đặt tệp javascript của bạn để có thể được tải bởi api chủ đề.
scripts[] = js/themename-script.js
Bây giờ trong themename-script.js thêm vào phần Drupal.behaviors.themename để trông giống như sau:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
Vì vậy, dòng chảy như sau:
Tôi chắc chắn nếu có một số xử lý ajax rằng những điều trên có thể nguy hiểm và việc gửi biểu mẫu không bao giờ có thể được thực hiện lại nếu một lỗi được bắt gặp trong xác thực form_api, vì vậy hãy kiểm tra điều này và tùy chỉnh để đáp ứng nhu cầu của bạn. Tôi đã tắt cả hai nút vì bạn vẫn có thể nhấp vào nút xem trước trong khi nút gửi bị tắt. Rõ ràng là milage của bạn khác nhau của tôi.
Drupal.behaviors
kiểu khai báo cũ ; Nó sẽ không hoạt động cho Drupal 7. Nó sẽ cần phải như vậy Drupal.behaviors.themename = { attach: function (context, settings) { // ...
. Xem Quản lý JavaScript trong Drupal 7 để biết thêm thông tin