我正在尝试为这个for循环生成函数的不同名称,例如realname1,realname2,realname3等。
for(i=0;i<data.results.length;i++) {
pic = data.results[i].profile_image_url;
var img = document.createElement("img");
img.src=pic;
img.width=50;
img.height=50;
img.addEventListener('click', realname, false); //here is the line where I want to change
document.body.appendChild(img);
username = data.results[i].from_user_name;
username_array.push(username);
text = data.results[i].text;
}
答案 0 :(得分:0)
img.addEventListener('click', 'realname_'+i+'()', false);
答案 1 :(得分:0)
在循环外添加这样的对象
var functionObj = {
'1':realname1,
'2':realname2
};
所以在里面,你可以做这样的事情......
img.addEventListener('click', functionObj[i], false);
编辑:错字。
答案 2 :(得分:0)
理想情况下,您可能希望创建一个更通用的函数,您可以传递一个参数,而不是具有多个函数。但是,如果没有看到这些功能的作用,我不能特别建议。
就您正在尝试做的事情而言,这取决于函数的定义方式。如果这些是全局函数(希望不是),那么这样的东西就可以工作:
img.addEventListener('click', window["realname"+i], false);
如果函数在一个公共对象中,则会更好:
var someobj = {
realname1 : function(){...},
realname2...
}
在这种情况下你会这样做:
img.addEventListener('click', someobj["realname" + i], false);
答案 3 :(得分:0)
你的问题有点含糊不清,但我想我可以猜到你想要做什么。并且你没有以javascript的方式做到这一点:)
您应该知道可以为变量分配函数,因此您可以在循环中管理它们,而不是在许多名称下创建大量函数。
var somefunctionIjustDid = function(a){ return a+1; }
somefunctionIjustDid(3); //returns 4
你要学习的第二件事是javascript范围的一些基础知识。如果你想创建一个函数来处理click并将它绑定到循环中的不同内容 - 它就是这样的:
for(var i=...){
someNode.addEventListener('click',(function(){
var store_i_for_later = i;
return function(){
//this here handles the event and has the current i value of the loop execution in store_i_for_later
}
})(),false)
}
这种机制叫做封闭,我推荐一些阅读。
毕竟 - 如果你使用带有选择器http://api.jquery.com/on/的jQuery.on
作为第二个参数,你可能根本不需要那个循环。或者你可以自己实现这个,没有jQUery,但这是另一个故事。