2013-03-07 3 views
0

Я получил это JQuery, который, очевидно, не работает:Bootstrap Аккордеон Подавить Открыть

$('input.descriptionLC').click(function(){ 
    $('.collapse').collapse('hide') 
}); 

Мой HTML генерируется этим цикл/добавления:

for (i=0; i < nodeArr.length; i++){ 
    $('#accordion2').append('<div class="accordion-group">' + 
    '<div class="accordion-heading">' + 
    '<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapse' + i + '">' + 
     '<hr class="inLC">' + 
     '<div class="divLC">' + 
      '<p class="titleLC">' + nodeArr[i][0] + '</p>' + 
      '<p class="imgWrap"><img class="imgLC" src="img/On_slider.png"></p>' + 
      '<input type="text" class="descriptionLC" id="description' + i + '">' + 
     '</div>' +  
    '</a>' + 
    '</div>' + 
    '<div id="collapse' + i + '" class="accordion-body collapse">' + 
    '<div class="accordion-inner">' + 
     'Anim pariatur cliche...' + 
    '</div>' + 
    '</div>' + 
    '</div>' 
); 
} 

ответ

0

Вы хотите использовать .on вместо .click, поскольку ваш DOM меняется.

См. this answer. .on будет (и должен) использоваться для просмотра родителя изменяющейся области для изменений; как только изменения будут выполнены, он автоматически перепроверяет все события в выбранные подэлементы (с фильтром). В этом ответе я даю более подробное описание того, как его использовать.

Короче говоря, хотя это неэффективно (вы должны изменить тело в некоторой DIV, содержащего только изменяющуюся часть DOM):

$('body').on("click", 'input.descriptionLC', function(e){ 
     $('.collapse').collapse('hide') 
}); 

если вы хотите просто следующий пункт аккордеон:

$('body').on("click", 'input.descriptionLC', function(e){ 
     $(this).next('.collapse').collapse('hide') 
}); 
+0

Я не знаю почему, но почему-то это открывает все аккордеоны на странице 30+. – dezman

+0

Да, это откроет все документы, поскольку вы выбираете .collapse для всей страницы. Если вам нужен только следующий ... редактирование ответа –

+0

?? Я хочу, чтобы никто из них не открывался. – dezman

0

Jquery

$('body').on('click', 'input.descriptionLC', function(e){ 
    $('.collapse').collapse('hide'); 
}); 

См. jQuery on docs

+0

Нет, нононо, вы никогда не должны связывать события с документами !!! –

+0

На пути более эффективно ... –

+0

Действительно? Я думал, что это заменяет живое событие? – soyuka

Смежные вопросы