javascript - 仅在创建元素后如何在没有任何事件处理程序的元素上应用函数
问题描述
我在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;
}
}
});
}
解决方案
您可以在创建元素的循环中立即调用您的函数。
$.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)
推荐阅读
- javascript - JavaScript:转换对象结构
- sql - 带有用于列的存储桶的 SQL
- angular - 使用自定义字体pdfmake进行角度
- c# - ASP.NET UserManager InvalidOperationException 依赖注入
- amazon-web-services - 即使成功,如何获取 CodeDeploy 事件日志?
- r - 如何计算 R 中矩阵的零空间,以便结果向量根据 R 中的自由变量显示基本变量?
- cassandra - Cassandra 是否支持 Java 10?
- php - JSON 编码数据进入 foreach
- javascript - 路由上下文中的 Node.js Javascript 变量范围
- json - NodeJS - 无法确定/验证传入的表单数据,因为所有这些数据都被视为字符串