jquery - 点击监听器无法从使用 jsondata 生成的 html 中工作

标签 jquery json

无法从元素获取点击监听器的值。
当我点击“tagit”时,什么也不会发生,不知道为什么!!

我的 javascript 中有以下代码:

<script type="text/javascript">
function UpdateBuddyStat()
{
    $.getJSON('/update-buddies', function(jsonData){

     var counterjson = 0;
     var LI_list_html = '';

     $.each(jsonData, function(i,value){

      var count = counterjson++;
      var username = jsonData[i].name;
      var buddy = jsonData[i].buddyid;

      var DIV_html = username+' <div class="FunctionBuddyBox"><span class="TagBuddy" id="TagsBuddy_'+buddy+'" data-tagbuddyid="'+buddy+'">tagit</span></div>';

      LI_list_html = LI_list_html+'<li>'+DIV_html+'</li>';
     });

     $("#ShowBuddyList ul li").remove();
     $("#ShowBuddyList ul").html(LI_list_html);  
    })
}
setInterval("UpdateBuddyStat()", 3000);
</script>

这就是我吸引听众的方式:

$('[id^=TagsBuddy_]').click(function(){
    var buddyid = $(this).data('tagbuddyid');
    alert(buddyid);         
});  

通过下面的代码(静态html),它可以正常工作:

<?php echo $value['name'] ?> <div class="FunctionBuddyBox">
<span class="TagBuddy" id="TagsBuddy_<?php echo $value['fb_id'] ?>" data-tagbuddyid="<?php echo $value['fb_id'] ?>">tagit</span>
</div>  

不知道为什么!有什么建议吗?非常感谢。

最佳答案

使用事件委托(delegate)来处理事件:

$('#ShowBuddyList').on('click', '[id^=TagsBuddy_]', function() {
    var buddyid = $(this).data('tagbuddyid');
    alert(buddyid);         
});

另外,不要将字符串与 setInterval 一起使用:

setInterval("UpdateBuddyStat()", 3000);

传递函数:

setInterval(UpdateBuddyStat, 3000);

关于jquery - 点击监听器无法从使用 jsondata 生成的 html 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14935359/

相关文章:

JavaScript、AJAX、PHP : can't set field values after getting json string

javascript - 在 jQuery 中获取鼠标滚轮事件?

php - UTF-8 中的值在 JSON 中被编码为 NULL

c# - 使用 JsonConvert 将 C# 中的 JSON 转换为对象

java - 如何在不发送实体完整 json 的情况下更新对象

java - 使用 Unirest 和 Java 以及 Selenium WebDriver 解析 Json

javascript - 带有 IE 11 的 jQuery UI 自动完成 - 有线行为

javascript - 变量在另一个 block 中也是可见的

javascript - 找到用户在 JS 中选择的正确按钮?

ios - 如何在快速发送到 json 解析器之前删除 xml 标签