Posterior a de una prolongada selección de información dimos con la respuesta esta duda que pueden tener ciertos lectores. Te compartimos la respuesta y nuestro objetivo es resultarte de mucha ayuda.
Solución:
Lo más importante es que tienes que usar el selector JQuery context
. De lo contrario, ejecuta todo el DOM a través de su código js en cualquier momento cuando los comportamientos de Drupal le pasan solo context
procesar.
Si su función aún se ejecuta varias veces, agregue una vez () con un identificador único:
$('input.myCustom', context).once('mySecondBehavior').each(function () {
No olvides agregar la biblioteca. core/jquery.once
a mytheme.libraries.yml, consulte https://www.drupal.org/docs/8/api/javascript-api/javascript-api-overview
Acabo de encontrar esta publicación mientras trabajaba en algo en nuestro proyecto. Tenemos múltiples eventos vinculados a $(‘cuerpo’, contexto) ya que la flexibilidad en la plataforma permite que los widgets y similares se coloquen en casi cualquier lugar dentro del cuerpo.
Usando $('body', context).on('click', '.modal-trigger', function (e) );
estaba causando que el evento de clic se vinculara al cuerpo 2x.
simplemente usando $('body', context).once().on('click', '.modal-trigger', function (e) );
estaba vinculando solo el último script adjunto/cargado al cuerpo, lo que resultó en que no se adjuntó ningún otro evento de script.
Agregar .once() con un identificador único para cada secuencia de comandos resolvió este problema maravillosamente.
Ex. 1er guión modal
Drupal.behaviors.SigmaModal = {
attach: function (context, settings) {
// Trigger sigma dialog on click.
$('body', context).once('SigmaModal').on('click', '.sigma-modal-trigger', function (e) {
segundo guión modal
Drupal.behaviors.DisplayModal = {
attach: function (context, settings) {
// Trigger generic dialogs on click.
$('body', context).once('DisplayModal').on('click', '.modal-trigger', function (e) {