首页 > 解决方案 > 仅在创建元素后如何在没有任何事件处理程序的元素上应用函数

问题描述

我在javascript上制作了一个动态元素。实际上我正在从 db 中检索一些数据,并在响应时在 javascript 中创建了一个元素

  $.ajax({
                url: 'php/count_comments.php',
                type: 'post',
                data: {

                },
                success: function(response) {

                    var data = JSON.parse(response);
                       if(data!='') {  

                    $.each(data, function(i, item) {
                            var span3=document.createElement("span");
                             span3.appendChild(document.createTextNode("No Comments"));
                             span3.setAttribute("id",n+newsid);
                             span3.setAttribute("class","ment");
                            p1.appendChild(span3);


                    });

                }else if(data==''){
                    alert("Admin has not uploaded any news yet");
                    return false;
                }

                }
                });

现在,当元素已创建并且每个元素都有一个唯一的 id 现在我想运行一个函数,而每个元素没有任何事件处理程序,这是我要运行的函数

function comments{
    var target = event.target || event.srcElement;
             var ids = target.id;
              var id = ids.slice(-14);

        //      alert(id);
              $.ajax({
                url: 'php/count_comments.php',
                type: 'post',
                data: {
                    id:id
                },
                success: function(response) {

                    var data = JSON.parse(response);
                       if(data!='') {  

                    $.each(data, function(i, item) {
//                         var target = event.target || event.srcElement;
//                            var ids = target.id;
//                        alert(ids);
             //     alert(document.getElementById(ids).innerHTML);
                        document.getElementById(ids).innerHTML=data[i].comments+ " Comment(s)";
                    });

                }else if(data==''){
                    //alert("No comments yet");
                    return false;
                }

                }
                });

}

标签: javascripthtml

解决方案


您可以在创建元素的循环中立即调用您的函数。

$.each(data, function(i, item) {
    var span3=document.createElement("span");
    span3.appendChild(document.createTextNode("No Comments"));
    span3.setAttribute("id",n+newsid);
    span3.setAttribute("class","ment");
    p1.appendChild(span3);

    //call from here with the id
    comments(n+newsid)
});

此外,注释函数被错误地声明,更正它并将 id 作为参数。

function comments(id) {
 // do your stuff
}

如果您想静默调用注释方法,则在调用时使用超时功能

setTimeout(function() {
    comments(n+newsid);
}, 0)

推荐阅读