Tengo un comportamiento que se agrega on
a algunas casillas de verificación.
(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 muy bien, pero las casillas de verificación están en la parte cargada de AJAX. Si vuelvo a cargar esa parte del formulario, hacer clic en ellos hace que aparezca la ventana emergente de confirmación dos veces. Ahora, sé que puedo probar la función interna si se llama por primera vez en una fila, pero preferiría asegurarme de que se agregue a mi elemento solo una vez y, por lo tanto, solo se llame una vez. ¿Cómo puedo hacer eso?
javascript
Mołot
fuente
fuente
Necesita usar la función once () para lograr esto. De esta página
La cadena "myModule" que se pasa a la función se establece como un marcador en los elementos que coinciden con la selección jQuery, por lo que la próxima vez que se llame se ignorará. No use la misma cadena si llama a la función de una sola vez varias veces para diferentes propósitos, de lo contrario puede anular su propósito.
fuente
Aquí hay un ejemplo que se expande en la respuesta de frazras:
fuente
Drupal.behaviors.checkOnce = { attach: function (context, settings) { if (context === document) { check(); } function check() { //code } } };
En este caso, lacheck()
función se ejecutará solo una vez, cuando el contexto será undocument
también puedes hacer esto:
fuente
Aquí hay otra forma de tener una función que se ejecuta una vez:
Fuente: https://www.drupal.org/forum/support/module-development-and-code-questions/2018-06-15/run-js-funtion-once-not-attach-once#comment-12654121
fuente