Drupal, похоже, не предотвращает отправку нескольких форм, даже на страницах узлов. Этот QA предлагает исправить это на стороне сервера.
Как я могу отключить кнопку отправки после нажатия?
Любые другие решения?
Drupal, похоже, не предотвращает отправку нескольких форм, даже на страницах узлов. Этот QA предлагает исправить это на стороне сервера.
Как я могу отключить кнопку отправки после нажатия?
Любые другие решения?
Ответы:
Это только в dev, но модуль Hide Submit поможет. Одна из особенностей:
Скрыть (или отключить) кнопку отправки после нажатия
Я только что установил его на сайт разработчика, и, похоже, он хорошо работает для форм добавления узлов; когда вы нажимаете кнопку отправки, она скрывается и заменяется загрузочным изображением и сообщением «Пожалуйста, подождите ...», прежде чем форма будет окончательно отправлена. Я не пробовал это на любых других формах все же.
hook_form_alter()
- если он использует hook_form_FORMID_alter()
, переключите его на общий hook_form_alter()
. Если это общее hook_form_alter()
с if, добавьте некоторые 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 для отключения кнопки после отправки формы. В файле 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 обнаружена ошибка, поэтому протестируйте ее и настройте в соответствии со своими потребностями. Я отключил обе кнопки, так как вы все еще можете нажать кнопку предварительного просмотра, пока кнопка отправки была отключена. Очевидно, твой milage мой варьируется.
Drupal.behaviors
стиль объявления; это не сработает для Drupal 7. Так и должно быть Drupal.behaviors.themename = { attach: function (context, settings) { // ...
. См. Управление JavaScript в Drupal 7 для получения дополнительной информации