J'ai un comportement qui s'ajoute on
à certaines cases à cocher.
(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);
Cela fonctionne très bien, mais les cases à cocher sont dans la partie chargée par AJAX. Si je recharge cette partie du formulaire, en cliquant dessus, la fenêtre de confirmation apparaît deux fois. Maintenant, je sais que je peux tester la fonction inside si c'est la première fois d'affilée qu'elle est appelée, mais je préférerais m'assurer qu'elle n'est ajoutée à mon élément qu'une seule fois, et donc appelée qu'une seule fois. Comment puis je faire ça?
javascript
Mołot
la source
la source
Vous devez utiliser la fonction once () pour y parvenir. De cette page
La chaîne "myModule" passée à la fonction est définie comme un marqueur sur les éléments correspondant à la sélection jQuery, donc la prochaine fois qu'elle est appelée, elle les ignore. N'utilisez pas la même chaîne si vous appelez la fonction once plusieurs fois à des fins différentes, sinon vous risquez de vaincre son objectif.
la source
Voici un exemple qui se développe sur la réponse frazras:
la source
Drupal.behaviors.checkOnce = { attach: function (context, settings) { if (context === document) { check(); } function check() { //code } } };
Dans ce cas, lacheck()
fonction ne fonctionnera qu'une seule fois, lorsque le contexte sera undocument
vous pouvez aussi le faire aussi:
la source
voici une autre façon d'avoir une fonction qui s'exécute une fois:
Source: https://www.drupal.org/forum/support/module-development-and-code-questions/2018-06-15/run-js-funtion-once-not-attach-once#comment-12654121
la source