Не удается получить доступ к динамически генерируемому элементу

77
12

Невозможно получить динамически генерируемый элемент: Это моя функция для запроса json:

$.getJSON('/getJSON.php?selectorcat='+var1, function(jsonData){

var LI_list_html = '';
var sum = 0;

if(jsonData[0])
{
$.each(jsonData, function(i,value)
{
var catname = jsonData[i].name;
var id = jsonData[i].id;
var DIV_html = catname;

LI_list_html = LI_list_html+'<li class="selectorsub" data-catselectsub="'+id+'" id="SelectorSubcat_'+id+'">'+DIV_html+'</li>';
});
}
else
{
LI_list_html = 'No subcats there..';
}

Поэтому, когда я получаю сгенерированный html следующим образом:

<ul>
<li class="selectorsub" data-catselectsub="169" id="SelectorSubcat_169">CAT1</li>
<li class="selectorsub" data-catselectsub="170" id="SelectorSubcat_170">CAT2</li>
<li class="selectorsub" data-catselectsub="171" id="SelectorSubcat_171">CAT3</li>
<li class="selectorsub" data-catselectsub="172" id="SelectorSubcat_172">CAT4</li>
</ul>

Я не могу получить доступ к элементу li:

$("[id^=SelectorSubcat_]").click(function() {
alert($(this).data('catselectsub'));
});

Я думаю, что создатели, которые сгенерированы, не готовы к DOM, почему они не могут их получить.

спросил(а) 2015-01-14T17:49:00+03:00 4 года, 10 месяцев назад
1
Решение
111

Обработчики событий привязаны только к выбранным в данный момент элементам; они должны существовать на странице в момент, когда ваш код делает привязку к событию.

При динамическом создании элементов необходимо использовать делегирование событий с использованием метода.on() делегированных событий.

т.е.

$(document).on('event','selector',callback_function)

пример

$(document).on('click', "[id^=SelectorSubcat_]", function(){
//Your code
});

Вместо document вы должны использовать ближайший статический контейнер для лучшей производительности.

ответил(а) 2015-01-14T17:52:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема