Eu tenho um comportamento que adiciona on
a algumas caixas de seleção.
(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);
Funciona muito bem, mas as caixas de seleção estão na parte carregada em AJAX. Se eu recarregar essa parte do formulário, clicar nelas fará o pop-up de confirmação duas vezes. Agora, eu sei que posso testar a função interna se for a primeira vez consecutiva que é chamada, mas eu preferiria garantir que ela seja adicionada ao meu elemento apenas uma vez e, portanto, chamada apenas uma vez. Como eu posso fazer isso?
javascript
Mołot
fonte
fonte
Você precisa usar a função once () para conseguir isso. A partir desta página
A string "myModule" passada para a função é definida como um marcador nos elementos correspondentes à seleção do jQuery; portanto, na próxima vez que for chamada, os ignorará. Não use a mesma string se você chamar a função outrora várias vezes para propósitos diferentes; caso contrário, poderá anular seu objetivo.
fonte
Aqui está um exemplo que se expande nas respostas às frazras:
fonte
Drupal.behaviors.checkOnce = { attach: function (context, settings) { if (context === document) { check(); } function check() { //code } } };
Nesse caso, acheck()
função será executada apenas uma vez, quando o contexto for umdocument
você também pode fazer isso:
fonte
Aqui está outra maneira de ter uma função que é executada uma vez:
Fonte: https://www.drupal.org/forum/support/module-development-and-code-questions/2018-06-15/run-js-funtion-once-not-attach-once#comment-12654121
fonte