在返回的json结果上使用bind('click')/添加到DOM

时间:2009-12-04 16:13:17

标签: jquery dom

所以我尝试了可靠的谷歌,但没有找到令人满意的解决方案。基本上,我不确定我所做的事情是否应该起作用。

我想进行一个返回JSON结果的ajax调用。我迭代这个结果并写一个像这样的字符串并推送到#results span(所有这一切都很好):

var str='';
for (var n=0;n<data.length; n++){
    str=+"<div class='game_name'>" + data[n]['name']+"</div><div class='game_id'>"+ data[n]['id'] +"</div>";

}
$('#results').html(str);

然后(通过,然后我的意思是在返回结果之前将其编码到页面中)使用类似这样的game_name类绑定一个click事件(这部分不起作用,但对于手工编码到页面中的内容工作正常开始):

$(".game_name").bind('click',function(){
   alert('here i am');
});

但返回的结果没有与之关联的绑定。如何才能使点击响应?有没有办法触发一个事件,以便让DOM意识到已经将新元素添加到DOM中?或者我只是想知道这应该如何运作?

感谢您的帮助

4 个答案:

答案 0 :(得分:3)

使用live()代替bind()

$(".game_name").live('click', function() {
   alert('here i am');
});

答案 1 :(得分:0)

您是否查看了jQuery的live事件?它允许您为所有动态添加的元素绑定click

答案 2 :(得分:0)

使用live代替:

$(".game_name").live('click',function(){
   alert('here i am');
});

更多信息:http://docs.jquery.com/Events/live

答案 3 :(得分:0)

如果您确保在$('#results').html(str);行之后运行绑定,那么您的代码应该可以运行,但我认为您可能会更好,注册 live 事件监听器, “所有匹配此选择器的项都应绑定到此侦听器,即使它们在执行此代码后的某个时刻被添加到DOM中”:

$(".game_name").live('click',function(){
   alert('here i am');
});