1

无法从元素获取单击侦听器的值。
当我点击“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>  

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

4

4 回答 4

4

使用事件委托来处理事件:

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

另外,不要使用字符串setInterval

setInterval("UpdateBuddyStat()", 3000);

传递函数:

setInterval(UpdateBuddyStat, 3000);
于 2013-02-18T11:39:53.033 回答
3

您需要事件委托:

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

委托给 dom 中可用的最近的父级,或者document改为使用。

于 2013-02-18T11:40:24.797 回答
3

当您动态加载 HTML 内容时,您必须将其.on()用作事件侦听器。尝试

$('#ShowBuddyList ul').on('click', '[id^=TagsBuddy_]', function(){
    var buddyid = $(this).data('tagbuddyid');
    alert(buddyid);         
});  
于 2013-02-18T11:41:23.140 回答
2

改变

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

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

click()方法仅适用于页面加载期间添加的元素 - 您需要on()用于动态添加的内容。请注意,on()方法的选择器需要在文档加载时出现,并且必须是on()方法内部使用的选择器的父元素('[id^=TagsBuddy_]'在本例中)

于 2013-02-18T11:39:11.550 回答