Как перезапустить функцию при добавлении динамического контента c - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть функция jQuery ниже, которая инициируется, когда DOM готов, добавление нового элемента в DOM и вызов функции init не работает с вновь добавленным элементом.

accordion = (function(){

  var $accordion = $(document).find('.js-accordion');
  var $accordion_header = $($accordion).find('.js-accordion-header');

  // default settings
  var settings = {
    // animation speed
    speed: 400,

    // close all other accordion items if true
    oneOpen: false
  };

  return {
    init: function($settings) {

      $accordion_header.on('click', function() {
        accordion.toggle($(this));
      });

      $.extend(settings, $settings);

      // ensure only one accordion is active if oneOpen is true
      if(settings.oneOpen && $('.js-accordion-item.active').length > 1) {
        $('.js-accordion-item.active:not(:first)').removeClass('active');
      }

      // reveal the active accordion bodies
      $('.js-accordion-item.active').find('> .js-accordion-body').show();

      // trigger date picker on first element
      if($('.js-accordion-item.active').length > 0 )
      {
        accordion.applyDatepicker($('.js-accordion-item.active:first'));
      }
    },
    toggle: function($this) {

      if(settings.oneOpen && $this[0] != $this.closest('.js-accordion').find('> .js-accordion-item.active > .js-accordion-header')[0]) {
        $this.closest('.js-accordion')
          .find('> .js-accordion-item')
          .removeClass('active')
          .find('.js-accordion-body')
          .slideUp();
      }

      // show/hide the clicked accordion item
      $this.closest('.js-accordion-item').toggleClass('active');
      $this.next().stop().slideToggle(settings.speed);

      // Apply datepicker if in jobs
      accordion.applyDatepicker($this);
      accordion.applySelect($this);
    }
  }
})

Теперь, если я клонирую объект .js-accordion, добавляю его в DOM, а затем вызываю accordion.init, вновь добавленный аккордеон не работает, потому что var $accordion не перезагружается в init и перемещение этих переменных в функцию init работает, но предыдущие .js-accordion s не работают.

Любая помощь будет принята с благодарностью.

...