Схоже, Drupal не запобігає надсиланню декількох форм, навіть на сторінках вузлів. Цей QA пропонує виправити його на стороні сервера.
Як я можу відключити кнопку надсилання після натискання?
Будь-які інші рішення?
Схоже, Drupal не запобігає надсиланню декількох форм, навіть на сторінках вузлів. Цей QA пропонує виправити його на стороні сервера.
Як я можу відключити кнопку надсилання після натискання?
Будь-які інші рішення?
Відповіді:
Це лише в програмі Dev, але модуль Hide Submit зробив би свою справу. Однією з особливостей є:
Сховати (або відключити) кнопку подання після її натискання
Я щойно встановив його на сайті розробників, і він, здається, працює добре для форм додавання вузлів; після натискання кнопки надсилання її приховують і замінюють завантажувальним зображенням та повідомленням "Будь ласка, зачекайте ...", перш ніж форма буде остаточно надіслана. Я ще не пробував цього на будь-яких інших формах.
hook_form_alter()
- якщо вона використовується hook_form_FORMID_alter()
, переключіть її на загальну hook_form_alter()
. Якщо це загальне значення, hook_form_alter()
якщо всередині, додайте or
в це деякі 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;
}
});
});
}
};
Найпростіший спосіб - це зробити тематичне рішення на основі JavaScript, щоб відключити кнопку після подання форми. У файл topic.info помістіть файл javascript, щоб він міг завантажувати тему api.
scripts[] = js/themename-script.js
Тепер у topicname-script.js додайте до розділу Drupal.behaviors.themename, щоб виглядати наступним чином:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
Отже, потік такий:
Я впевнений, що є якась обробка аякса, що вищезазначене може бути небезпечним, і подання форми більше ніколи не може бути повторене, якщо помилка виявиться у валідації Form_api, тому тестуйте це і налаштуйте відповідно до ваших потреб. Я відключив обидві кнопки, оскільки ви все ще можете натиснути кнопку попереднього перегляду, поки кнопку відсилання була відключена. Очевидно, мій пробіг мій змінюється.
Drupal.behaviors
стиль декларування; це не буде працювати для Drupal 7. Це повинно бути Drupal.behaviors.themename = { attach: function (context, settings) { // ...
. Див Управління JavaScript в Drupal 7 для отримання додаткової інформації