如何将对象传递给 onclick 事件[重复]

2024-05-02

可能的重复:
Javascript 循环内的事件处理程序 - 需要闭包吗? https://stackoverflow.com/questions/341723/event-handlers-inside-a-javascript-loop-need-a-closure

我通过 API 调用获取一些 json 对象。它的格式如下:-

{data:[{id:"1",name:"some1",url:"someurl1"},{id:"2",name:"some2",url:"someurl2"}...]}

我通过 jsonp 结果得到它,它的解析如下:-

function(results){
   for(var i=0;i<10;i++){
    item=document.createElement("div");
    item.innerHTML=results.data[i].name;
    item.onclick=function(){
        console.log(results.data[i]);  //--->this is where i am stuck 
      }
    }
 }

如何将特定对象从循环传递到 onclick 事件。我的意思是创建的第一个 div 应该有一个包含第一个对象的数据的 onclick 事件,第二个 div 应该有来自第二个对象的数据。 请询问我是否需要更多说明

编辑:- 如果我做这样的事情:-

item.onclick=function(){
  console.log(results.data[1])
}

我在所有项目的 onclick 事件中获得该特定对象,但这不是我想要的

编辑:- 这就是我最终解决的方法。感谢 DCoder 指向的链接。

item.onclick =function(object){
           return function(){
           //do something with the object
           }

         }(obj);

快速解决方案:

function(results){
    for(var i=0;i<10;i++){
        (function(index){ // create a closure, this makes a new scope
            item=document.createElement("div");
            item.innerHTML=results.data[index].name;
            item.onclick=function(){
                console.log(results.data[index]);  //--->this is where i am stuck 
            }
        })(i);  // pass in i
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将对象传递给 onclick 事件[重复] 的相关文章