Saya memiliki input tombol FAPI dasar yang diaktifkan #ajax dan itu berfungsi dengan baik, tetapi saya ingin menambahkan JS "Apakah Anda yakin?" konfirmasi popup ketika mengklik tombol sebelum kode benar-benar berjalan, dan saya tidak yakin bagaimana melakukan itu karena FAPI's JS tampaknya memakan klik sebelum saya dapat melakukannya tidak peduli apa yang saya lakukan.
Saya sudah mencoba menambahkan inclick handler inline, seperti:
$form['search_filters']['channels']['channel_delete_' . $channel->nid] = array(
'#type' => 'button',
'#name' => 'channel_delete_' . $channel->nid,
'#value' => 'Delete',
'#attributes' => array(
'class' => array('confirm'),
'onclick' => "return confirm('Are you sure you want to delete that?')"
),
'#button_type' => 'no-submit',
'#ajax' => array(
'callback' => 'delete_channel_callback',
'wrapper' => 'channel_container_' . $channel->nid
),
);
... yang tidak membantu, dan saya juga mencoba menambahkan:
$('.confirm').click(function(e) {
e.preventDefault();
alert('Is this recognized')? // never runs
});
di JS modul saya yang juga diabaikan.
Ada ide lain? Apakah ada cara untuk menambahkan submit handler ke bagian atas stack yang akan dikenali Drupal #ajax?
sumber
$('.confirm').unbind('click');
) ... atau saya salah baca? maaf tidak familier denganunbind
mengkonfirmasikan bahwa Jeroen sedang memperbaiki kode googletorp.
Namun, saya sendiri menemukan bahwa jenis "mousedown" harus dilepas dan diikat kembali. Jadi bagian dari kode yang bekerja untuk saya adalah sebagai berikut:
sumber
Pertanyaannya sudah lama, tetapi saya juga tertarik. Menurut pendapat saya, cara termudah adalah menggunakan acara klik dalam definisi Ajax Anda, karena Drupal menggunakan acara mousedown sebagai default:
Maka Anda hanya perlu menambahkan
.mousedown()
acara ke tombol Anda di file Javascript Anda, karena itu dipecat sebelum acara klik:Jika Anda masih ingin Permintaan Ajax Anda dipanggil dengan acara mousedown, Anda dapat menggunakan acara khusus:
Kemudian Anda dapat memicu acara ini jika ada
.mousedown()
file Javascript Anda:Kedua versi berfungsi!
sumber
preventDefault
di handler klik saya untuk mencegah pengiriman normal (non-js) formulir, masih.Sudahkah Anda mencoba menjalankan JS dalam perilaku Drupal? Bisa jadi handler klik Anda dilampirkan setelah Drupal.
Bagaimanapun, Anda harus dapat melepaskan ikatan handler klik Drupal pada tombol sehingga Anda dipanggil terlebih dahulu dan Anda dapat memanggil Ajax klik handler Drupal secara manual (dan kondisional).
sumber
Menjawab untuk mencatat bahwa kode googletorp tidak 100% benar.
Anda perlu mengubah baris tempat acara disimpan untuk ini:
Dengan cara ini Anda menghilangkan masalah referensi objek, jadi ketika melepas ikatan peristiwa klik, itu tidak mengikat di var Anda juga;)
Perlu diketahui juga bahwa sejak jQuery 1.8, metode .data () telah usang. Mendapatkan data acara sekarang dilakukan melalui struktur data internal:
Sumber: http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/
sumber
Saya menemukan banyak jawaban yang berguna di atas dan bisa membuat formulir saya berfungsi. Menyatukan semuanya, inilah yang berfungsi untuk aplikasi saya: Tombol hapus formulir dengan dialog konfirmasi dan panggilan balik AJAX untuk mengubah konten daftar terpilih.
Javascript:
Elemen formulir (daftar pilih) yang akan diubah:
Tombol:
Dan akhirnya, callback AJAX:
sumber
Saya telah memperbaikinya dengan memodifikasi file drupal misc / ajax.jx.
Buat salinan file ajax.js dan letakkan di modul khusus apa saja dan modifikasi
Drupal.ajax = function (base, element, element_settings) {
fungsinya sebelum Kirim:Ini bekerja dengan baik untuk saya.
sumber
Mungkin agak tua, tapi saya bertanya-tanya mengapa kita tidak bisa menggunakan:
sumber