使用JavaScript在循环中生成不同的函数名称

时间:2013-02-08 21:25:44

标签: javascript function loops

我正在尝试为这个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;
}

4 个答案:

答案 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,但这是另一个故事。