Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.11.2017, 20:01
Профессор
Отправить личное сообщение для imedia Посмотреть профиль Найти все сообщения от imedia
 
Регистрация: 20.05.2014
Сообщений: 292

Почему после получения аяксом данных не срабатывает повторно функция
Есть вот такой блок и желтый элемент это элемент с классом .cat_block
http://prntscr.com/h950ne
К этому блоку применяется вот такой код
$('.cat_block').click(function(){
            alert()
            var id_cat = $(this).parent('a').find('input').val()
            var cl=$(this).parent('a').parent().attr('class');
            cl=cl.split(' ')[1]
            var simbol=parseInt(cl.slice(10))+1
            alert(cl)
            alert(simbol)
            new_block_cl=cl.slice(0, 10)+simbol
            $.ajax({
                type: "POST",
                dataType: 'json',
                url: '/admin/show_subcat',
                data: {id_cat: id_cat},
                success: function (data) {
                    $('.'+new_block_cl+'').empty();
                    $.each( data, function( key, value ) {
                        $('.'+new_block_cl+'').append(' <a ><div class="cat_block" >' +
                            '<input type="hidden" value="'+value.id+'">' +
                            value.name+
                            '<span class="fa arrow" style="float:right"></span>' +
                            '</div></a>')
                    });
                }

            });

        })

Но когда код отработал и появились подкатегории в соседнем блоке
http://prntscr.com/h951ag
Но когда я кликаю по блоку Автозапчасти
который тоже имеет класс .cat_block Повторно код не отрабатывает даже не вижу первого алерта
Ответить с цитированием
  #2 (permalink)  
Старый 11.11.2017, 23:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Потому, что добавленного асинхронно объекта <div class="cat_block" > на момент установки обработчика на странице не было.

Либо делегирование, либо установка ему обработчика после добавления в документ.
Ответить с цитированием
  #3 (permalink)  
Старый 11.11.2017, 23:52
Профессор
Отправить личное сообщение для imedia Посмотреть профиль Найти все сообщения от imedia
 
Регистрация: 20.05.2014
Сообщений: 292

Приведите пожалуйста пример к сожалению не понимаю как это сделать
Ответить с цитированием
  #4 (permalink)  
Старый 12.11.2017, 08:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

$(селектор ближайшего родителя элементов, который гарантировано есть на странице).on('click', '.cat_block', function() { ... }) - это делегирование обработки события.

$(html).appendTo(получатель).find(есл и надо найти объект).on(...) - это установка обработчика динамически добавляемому элементу.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление страницы после получения ответа от сервера potrashitel AJAX и COMET 9 24.02.2015 10:04
Обработка combobox после получения данных. Tie ExtJS 1 02.12.2011 12:06
jquery не срабатывает find после ajax versoul jQuery 7 09.09.2011 16:20
функция внутри Live() срабатывает после второго клика Ad1r jQuery 7 09.08.2011 14:11
Почему скрипт срабатывает только после обновления страницы? Randomizer jQuery 2 01.09.2010 19:01