2013-03-22 2 views
1

При попытке создать динамический аккордеон с jquery я не могу понять, почему отдельные элементы не рухнули. Они просто появляются как текст, а не влияют на эффект аккордеона. Может ли кто-нибудь заметить мою ошибку? (Предположим, что переменные данные все содержат данные)динамический JQuery mobile accordion

редактировать: Я просто попытался его в Firefox вместо хрома ради любопытства и поведения аккордеон works..I не получить его

var outdiv = $('<div data-role="collapsible-set"></div>'); 

for(var i=0; i<data.length; i++){ 

    var innerdiv = $('<div data-role="collapsible" data-collapsed="true" ></div>'); 
    innerdiv.append('<h3>' + 'Tweet #' + i + '</h3>'); 
    innerdiv.append('<p>' + data[i].text + '</p>'); 

    outdiv.append(innerdiv); 

    outdiv.appendTo('#output'); 


} 

ответ

3

Вы должны вызвать collapsibleset() метод на ваш outdiv

$('#output [data-role=collapsible-set]').collapsibleset(); 

Работа jsFiddle здесь

+0

отличный ответ! Не могли бы вы вкратце объяснить, почему это необходимо вместо триггера? – Sam

+0

Оба они работают в jqm 1.2 и 1.3. 'collapsibleset()' непосредственно вызывает метод инициализации виджета, 'trigger ('create')' запускает событие 'create', но вам нужно использовать его ** на родительском элементе **, и это хорошо, когда вам нужно увеличить более одного виджет за раз. – peterm

0

Я не пользователь мобильных jQuery, но мне кажется, что вам нужно настроить поведение для вашего добавленного контента, что-то вроде $('#output').trigger('create') после вашего цикла.

Его обсуждали более here

0

Я не знаю, если вы можете выбрать весь элемент так или нет, но вы также можете использовать JQuery-х Attribute Contains Selector

//So your outdiv would become 
var outdiv = $('div[data-role*="collapsible-set"]'); 

//And then innerdiv, something like 
var innerdiv = $('div[data-role*="collapsible"][data-collapsed*="true"]'); 
0

Изменить код:

outdiv.append(innerdiv).collapsibleset("refresh"); 

Вы должны загрузить JQuery Mobile версии 1.3.2.