Mam zachowanie, które dodaje się on
do niektórych pól wyboru.
(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);
Działa bardzo dobrze, ale pola wyboru znajdują się w części załadowanej do AJAX. Jeśli ponownie załaduję tę część formularza, kliknięcie ich spowoduje dwukrotne wyświetlenie potwierdzenia. Teraz wiem, że mogę przetestować funkcję wewnętrzną, jeśli jest wywoływana po raz pierwszy, ale wolałbym upewnić się, że jest dodana do mojego elementu tylko raz, a zatem wywoływana tylko raz. Jak mogę to zrobić?
javascript
Mołot
źródło
źródło
Aby to osiągnąć, musisz użyć funkcji once (). Z tej strony
Ciąg „myModule” przekazany do funkcji jest ustawiany jako znacznik na elementach pasujących do wyboru jQuery, więc przy następnym wywołaniu ignoruje je. Nie używaj tego samego ciągu, jeśli wywołujesz funkcję raz wiele razy w różnych celach, w przeciwnym razie możesz pokonać jej cel.
źródło
Oto przykład, który rozwija się w odpowiedzi na frazras:
źródło
Drupal.behaviors.checkOnce = { attach: function (context, settings) { if (context === document) { check(); } function check() { //code } } };
W takim przypadkucheck()
funkcja będzie działać tylko raz, gdy kontekstem będziedocument
możesz też to zrobić:
źródło
oto inny sposób, aby funkcja działała raz:
Źródło: https://www.drupal.org/forum/support/module-development-and-code-questions/2018-06-15/run-js-funtion-once-not-attach-once#comment-12654121
źródło