Я пытаюсь динамически добавить аккордеоны UIKit в сортируемый список. Исходные элементы (аккордеоны) работают, но динамически добавленные не работают.
HTML
<div class="second-list" data-uk-observe>
<div class="uk-sortable uk-margin uk-accordion" data-uk-sortable="{group:'test'}" data-uk-accordion="{showfirst: false}">
<div class="uk-margin">
<div class="uk-panel uk-panel-box uk-accordion-title">Item 1
<button class="uk-button delete-btn">×</button>
</div>
<div class="uk-accordion-content">test1</div>
</div>
<div class="uk-margin">
<div class="uk-panel uk-panel-box uk-accordion-title">Item 2
<button class="uk-button delete-btn">×</button>
</div>
<div class="uk-accordion-content">test2</div>
</div>
</div>
</div>
JavaScript
// Remove item handler
$(".delete-btn").on("click", function () {
// 400 is default
$(this).closest(".uk-margin").fadeOut(400, function () {
$(this).remove();
});
return false;
});
function addItem () {
var $container = $(".second-list").find("[data-uk-sortable]");
$container.append(
`<div class="uk-margin">
<div class="uk-panel uk-panel-box uk-accordion-title">new item
<button class="uk-button delete-btn">×</button>
</div>
<div class="uk-accordion-content">description</div>
</div>`
);
}
addItem();
Это минимальный пример, который я создал для воспроизведения проблемы. Сортируемый динамический элемент работает нормально (можно перетаскивать), а аккордеон - нет. При нажатии на нее я получаю:
Uncaught TypeError: Cannot read property 'data' of undefined
Что я пробовал:
Использование
data-uk-observe
в сортируемом элементе. Я не чувствую никакой разницы в использовании.Попытка инициализировать аккордеон с помощью UIKit API:
UIkit.accordion($(".uk-margin")); UIkit.accordion($(".uk-accordion-title")); UIkit.accordion($(".uk-accordion-content"));
Ни один из них не решает проблему.
Итак, как правильно добавить динамические аккордеоны GetUIKit?