У меня есть функция 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 не работают.
Любая помощь будет принята с благодарностью.