-1

我试图在这个 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

4 回答 4

0

理想情况下,您会希望创建一个更通用的函数来传递参数,而不是拥有多个函数。但是,如果没有看到这些功能的作用,我不能具体建议一个。

至于做你想做的事,这取决于函数是如何定义的。如果这些是全局函数(希望不是),那么这样的事情会起作用:

img.addEventListener('click', window["realname"+i], false);

如果函数在一个公共对象中,会更好一些:

var someobj = {
    realname1 : function(){...},
    realname2...
}

在这种情况下,你会这样做:

img.addEventListener('click', someobj["realname" + i], false);
于 2013-02-08T21:35:27.430 回答
0

您的问题有点模棱两可,但我想我可以猜到您要做什么。而且你不是用javascript方式做的:)

您应该知道您可以将函数分配给变量,因此您可以在循环中管理它们,而不是在很多名称下创建大量函数。

var somefunctionIjustDid = function(a){ return a+1; }
somefunctionIjustDid(3); //returns 4

您想学习的第二件事是 javascript 作用域的一些基础知识。如果您想创建一个函数来处理单击并将其绑定到循环中的不同事物 - 它是这样的:

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)

}

这种机制称为闭包,我推荐一些阅读。

毕竟 - 如果您使用jQuery.on委托http://api.jquery.com/on/并将选择器作为第二个参数,您可能根本不需要该循环。或者你可以自己实现这个,不用 jQUery,但那是另一回事了。

于 2013-02-08T21:37:06.317 回答
0
img.addEventListener('click', 'realname_'+i+'()', false);
于 2013-02-08T21:30:41.183 回答
0

在循环之外添加这样的对象

var functionObj = {
  '1':realname1,
  '2':realname2
};

所以在里面,你可以做这样的事情..

img.addEventListener('click', functionObj[i], false);

编辑:错字。

于 2013-02-08T21:31:36.610 回答