Drupal tampaknya tidak mencegah banyak pengiriman formulir, bahkan pada halaman node. QA ini menyarankan untuk memperbaikinya di sisi server.
Bagaimana saya bisa menonaktifkan tombol kirim setelah mengklik?
Ada solusi lain?
Drupal tampaknya tidak mencegah banyak pengiriman formulir, bahkan pada halaman node. QA ini menyarankan untuk memperbaikinya di sisi server.
Bagaimana saya bisa menonaktifkan tombol kirim setelah mengklik?
Ada solusi lain?
Jawaban:
Ini hanya di dev tetapi modul Sembunyikan Kirim akan melakukan trik. Salah satu fiturnya adalah:
Sembunyikan (atau nonaktifkan) tombol kirim setelah diklik
Saya baru saja menginstalnya di situs dev dan tampaknya berfungsi dengan baik untuk simpul menambahkan formulir; ketika Anda mengklik tombol kirim itu disembunyikan dan diganti dengan memuat gambar dan pesan 'Harap tunggu ...', sebelum formulir akhirnya dikirim. Saya belum mencobanya pada formulir lain.
hook_form_alter()
- jika menggunakan hook_form_FORMID_alter()
, alihkan ke generik hook_form_alter()
. Jika generik hook_form_alter()
dengan jika di dalam, menambahkan beberapa or
's dalam hal ini if
.
Berikut adalah solusi untuk Drupal 7. Kode adalah versi disederhanakan dari modul Sembunyikan Kirim.
Kode ini berfungsi dengan baik bahkan dengan tombol "Tambah lagi" dan formulir 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;
}
});
});
}
};
Cara termudah adalah dengan melakukan solusi javascript berbasis tema untuk menonaktifkan tombol setelah pengiriman formulir. Dalam file theme.info, letakkan file javascript Anda sehingga dapat dimuat oleh api tema.
scripts[] = js/themename-script.js
Sekarang di themename-script.js tambahkan ke bagian Drupal.behaviors.themename agar terlihat seperti berikut:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
Jadi alurnya adalah sebagai berikut:
Saya yakin jika ada beberapa pemrosesan ajax yang di atas bisa berbahaya dan pengiriman formulir tidak akan pernah bisa dilakukan lagi jika ada kesalahan dalam validasi form_api, jadi lakukan pengujian ini dan sesuaikan untuk memenuhi kebutuhan Anda. Saya menonaktifkan kedua tombol karena Anda masih bisa mengklik tombol pratinjau saat tombol kirim dinonaktifkan. Jelas jarak tempuh saya bervariasi.
Drupal.behaviors
gaya deklarasi lama ; itu tidak akan berfungsi untuk Drupal 7. Itu perlu Drupal.behaviors.themename = { attach: function (context, settings) { // ...
. Lihat Mengelola JavaScript di Drupal 7 untuk info lebih lanjut