Wydaje się, że Drupal nie zapobiega przesyłaniu wielu formularzy, nawet na stronach węzłów. Ta kontrola jakości sugeruje naprawienie go po stronie serwera.
Jak mogę wyłączyć przycisk przesyłania po kliknięciu?
Jakieś inne rozwiązania?
Wydaje się, że Drupal nie zapobiega przesyłaniu wielu formularzy, nawet na stronach węzłów. Ta kontrola jakości sugeruje naprawienie go po stronie serwera.
Jak mogę wyłączyć przycisk przesyłania po kliknięciu?
Jakieś inne rozwiązania?
Odpowiedzi:
Jest tylko w wersji deweloperskiej, ale moduł Ukryj wysyłanie wystarczy. Jedną z funkcji jest:
Ukryj (lub wyłącz) przycisk wysyłania po jego kliknięciu
Właśnie zainstalowałem go na stronie deweloperskiej i wydaje się, że działa dobrze w przypadku formularzy dodawania węzłów; po kliknięciu przycisku Prześlij jest on ukryty i zastąpiony ładującym obrazem oraz komunikatem „Proszę czekać ...”, zanim formularz zostanie ostatecznie przesłany. Jednak nie próbowałem tego w żadnej innej formie.
hook_form_alter()- jeśli używa hook_form_FORMID_alter(), przełącz go na ogólny hook_form_alter(). Jeśli to jest ogólne, hook_form_alter()jeśli w środku, dodaj trochę orw tym if.
Oto rozwiązanie dla Drupala 7. Kod jest uproszczoną wersją modułu Ukryj wysyłanie.
Ten kod działa dobrze nawet w przypadku przycisków „Dodaj więcej” i formularzy 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;
}
});
});
}
};
Najprościej jest zrobić oparte na motywach rozwiązanie javascript, aby wyłączyć przycisk po przesłaniu formularza. W pliku theme.info umieść plik javascript, aby można go było załadować za pomocą interfejsu API kompozycji.
scripts[] = js/themename-script.js
Teraz w themename-script.js dodaj do sekcji Drupal.behaviors.themename, aby wyglądać następująco:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
Więc przepływ jest następujący:
Jestem pewien, że istnieje pewne przetwarzanie ajax, że powyższe może być niebezpieczne, a przesłanie formularza nigdy nie będzie możliwe, jeśli zostanie wykryty błąd podczas sprawdzania poprawności form_api, więc przetestuj to i dostosuj do swoich potrzeb. Wyłączyłem oba przyciski, ponieważ nadal można było kliknąć przycisk podglądu, gdy przycisk przesyłania był wyłączony. Oczywiście twój przebieg może się różnić.
Drupal.behaviorsstylu deklaracji; to nie zadziała dla Drupala 7. Musiałoby tak być Drupal.behaviors.themename = { attach: function (context, settings) { // .... Aby uzyskać więcej informacji, zobacz Zarządzanie JavaScript w Drupal 7