@betelgeuse09

Почему bootstrap не срабатывает на подгруженных через Ajax элементах?

есть вот такой код:

(function($){
    $(document).ready(function(){
        $('#application-general').on('change', '#select_type', function(){
            var data = {
                task:'application.getApplicationSettings',
                application_type:$('#select_type').val(),
                app_id:$('#application_id').val()
            };
            $.ajax({
                url: ajax_url,
                data: data,
                type: "POST",
                dataType : "json",
                success: function( json ){
		    if (json.error == false){
                        $('#application-settings').html(json.application_settings);
                    };
                },
                error: function( xhr, status, errorThrown ){
			// smth on error
                },
                complete: function( xhr, status ){
			// smth on complete
                }
            });
        });
    });
})(jQuery);

суть работы: в контейнере '#application-general' есть '#select_type' (выпадающий список) и контейнер '#application-settings'. При изменении '#select_type' в контейнер '#application-settings' загружаются новые настройки в зависимости от значения. Все работает прекрасно, но на подгруженных через ajax контролах не срабатывает bootstrap. Что делать? как инициировать работу bootstrap на подгружаемом контенте?

собственно, вот код элемента после обычной загрузки страницы:
<div class="control-group">
<div class="control-label">
<label id="jform_settings_seo-lbl" for="jform_settings_seo" class="hasTooltip" title="" data-original-title="<strong>Метатеги элементов</strong>">Метатеги элементов</label>
</div>
<div class="controls">
<fieldset id="jform_settings_seo" class="radio btn-group btn-group-yesno">
<input type="radio" id="jform_settings_seo0" name="jform_settings[seo]" value="0" checked="checked">
<label for="jform_settings_seo0" class="btn active btn-danger">Нет</label>
<input type="radio" id="jform_settings_seo1" name="jform_settings[seo]" value="1">
<label for="jform_settings_seo1" class="btn">Да</label>
</fieldset>
</div>
</div>


и код элемента после подгрузки через AJAX
<div class="control-group">
<div class="control-label">
<label id="jform_settings_seo-lbl" for="jform_settings_seo" class="hasTooltip" title="<strong>Метатеги элементов</strong>">
Метатеги элементов</label>
</div>
<div class="controls">
<fieldset id="jform_settings_seo" class="radio btn-group btn-group-yesno">
<input type="radio" id="jform_settings_seo0" name="jform_settings[seo]" value="0">
<label for="jform_settings_seo0">Нет</label>
<input type="radio" id="jform_settings_seo1" name="jform_settings[seo]" value="1" checked="checked">
<label for="jform_settings_seo1">Да</label>
</fieldset>
</div>
</div>


разница конечно же, есть, элементы label при обычной загрузке страницы имеют дополнительные классы. Неужели при загрузке через ajax эти классы нужно прописать руками?
  • Вопрос задан
  • 895 просмотров
Решения вопроса 2
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
Попробуйте вместо
$('#application-general').on('change', '#select_type', function(){

$(document).on('change', '#select_type', function(){
Ответ написан
@iShatokhin
JS developer
После добавления в DOM модель иницилизируйте ваши новые bootstrap элементы. Пример:
$('#jform_settings_seo-lbl').tooltip();

Все методы там.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@betelgeuse09 Автор вопроса
Я бесконечно благодарен Илья Шатохин и особенно Андрей Андреев за ответы, которые в итоге помогли мне найти решение! Вопрос решен, отыскал в проекте JS-код, который наводит кастомную красоту, добавляя нужные классы, и после ajax просто выполнил его)).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы