Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Почему после получения аяксом данных не срабатывает повторно функция (https://javascript.ru/forum/dom-window/71341-pochemu-posle-polucheniya-ayaksom-dannykh-ne-srabatyvaet-povtorno-funkciya.html)

imedia 11.11.2017 20:01

Почему после получения аяксом данных не срабатывает повторно функция
 
Есть вот такой блок и желтый элемент это элемент с классом .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 Повторно код не отрабатывает даже не вижу первого алерта

laimas 11.11.2017 23:31

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

Либо делегирование, либо установка ему обработчика после добавления в документ.

imedia 11.11.2017 23:52

Приведите пожалуйста пример к сожалению не понимаю как это сделать

laimas 12.11.2017 08:57

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

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


Часовой пояс GMT +3, время: 01:39.