Saya memiliki perilaku yang menambah on
beberapa kotak centang.
(function($) {
Drupal.behaviors.mymodule = {
attach: function (context, settings) {
$('.skip-line', context).on('change', function(){
// some code
if ( confirm(Drupal.t('Apply to all languages?')) ) {
// applying...
}
});
}
};
})(jQuery);
Ini bekerja dengan sangat baik, tetapi kotak centang berada di bagian yang dimuat AJAX. Jika saya memuat ulang bagian formulir itu, mengkliknya membuat popup konfirmasi dua kali. Sekarang, saya tahu saya bisa menguji fungsi dalam jika ini pertama kali berturut-turut dipanggil, tapi saya lebih suka memastikan itu ditambahkan ke elemen saya hanya sekali, dan dengan demikian disebut hanya sekali. Bagaimana saya bisa melakukan itu?
javascript
Mołot
sumber
sumber
Anda perlu menggunakan fungsi once () untuk mencapai ini. Dari halaman ini
String "myModule" yang diteruskan ke fungsi ditetapkan sebagai penanda pada elemen yang cocok dengan pemilihan jQuery, jadi kali berikutnya disebut itu mengabaikannya. Jangan gunakan string yang sama jika Anda memanggil fungsi yang dulu beberapa kali untuk tujuan yang berbeda, jika tidak, Anda bisa mengalahkan tujuannya.
sumber
Berikut adalah contoh yang memperluas jawaban frazras:
sumber
Drupal.behaviors.checkOnce = { attach: function (context, settings) { if (context === document) { check(); } function check() { //code } } };
Dalam hal inicheck()
fungsi akan berjalan hanya sekali, ketika konteksnya akan menjadidocument
Anda juga dapat melakukan ini:
sumber
berikut ini cara lain untuk memiliki fungsi yang berjalan sekali:
Sumber: https://www.drupal.org/forum/support/module-development-and-code-questions/2018-06-15/run-js-funtion-once-not-attach-once#comment-12654121
sumber