【发布时间】:2015-01-14 23:02:08
【问题描述】:
无法访问动态生成的元素: 这是我的 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,这就是为什么不能访问它们。
【问题讨论】:
-
你是 100% 正确的原因,这就是为什么我们有delegated events。顺便说一句,您的 jquery 选择器非常复杂,在这种情况下,您最好使用我看到的类。
-
为什么不依赖
.selectorsub类而不是[id^=]?它不仅更简洁,而且性能更好。
标签: jquery