У меня есть поведение, которое добавляет on
к некоторым флажкам.
(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);
Это работает очень хорошо, но флажки находятся в AJAX-загруженной части. Если я перезагружу эту часть формы, щелкнув по ней, вы получите всплывающее окно подтверждения дважды. Теперь я знаю, что могу проверить внутреннюю функцию, если она вызывается впервые, но я бы предпочел, чтобы она добавлялась в мой элемент только один раз и, следовательно, вызывалась только один раз. Как я могу это сделать?
javascript
МОЛОТ
источник
источник
Вам нужно использовать функцию Once () для достижения этой цели. С этой страницы
Строка «myModule», переданная функции, устанавливается в качестве маркера на элементах, соответствующих выбору jQuery, поэтому при следующем вызове она игнорируется. Не используйте одну и ту же строку, если вы вызываете функцию один раз несколько раз для разных целей, иначе вы можете победить ее назначение.
источник
Вот пример, который расширяет ответ frazras:
источник
Drupal.behaviors.checkOnce = { attach: function (context, settings) { if (context === document) { check(); } function check() { //code } } };
В этом случаеcheck()
функция будет запускаться только один раз, когда контекст будетdocument
Вы также можете сделать это тоже:
источник
вот еще один способ иметь функцию, которая запускается один раз:
Источник: https://www.drupal.org/forum/support/module-development-and-code-questions/2018-06-15/run-js-funtion-once-not-attach-once#comment-12654121
источник