0

i wanna create some div with an onclick event to run a function with a parameter

img.onclick=function (){getData(id);};

but all created elements onclick events have the last value of the id variable

my function is

 function getData(thisfolder){
    var request = new XMLHttpRequest();
    var response="";
    request.open("POST", "getdata.php",false);
    request.setRequestHeader("Content-type", "application/x-www-form-  urlencoded");
    request.send("parentid="+thisfolder);
    response=request.responseText;
    var contentform=document.getElementById('show-files');
    contentform.innerHTML="";

   var jsonResponse = JSON.parse(response);

  for (i=0;i<jsonResponse['posts'].length;i++){
    var element=document.createElement('div');
    var img=document.createElement('div');
        img.style.cssText='background-image: url(./icons/folder.png);';
        img.className="fileicon";
        var id=jsonResponse['posts'][i]['id'];

        img.onclick=function (){getData(id);};



    element.style.cssText="";
    element.className="folder";
    element.appendChild(img);
    contentform.appendChild(element);

}
}
Anupam
  • 7,966
  • 3
  • 41
  • 63
Afshin Izadi
  • 527
  • 1
  • 6
  • 13

1 Answers1

0

You can make use of let

Try this

function getData(thisfolder){
var request = new XMLHttpRequest();
var response="";
request.open("POST", "getdata.php",false);
request.setRequestHeader("Content-type", "application/x-www-form-  urlencoded");
request.send("parentid="+thisfolder);
response=request.responseText;
var contentform=document.getElementById('show-files');
contentform.innerHTML="";

var jsonResponse = JSON.parse(response);

for (i=0;i<jsonResponse['posts'].length;i++){
    var element=document.createElement('div');
    var img=document.createElement('div');
    img.style.cssText='background-image: url(./icons/folder.png);';
    img.className="fileicon";
    let id = jsonResponse['posts'][i]['id'];
    img.onclick=function (){getData(id);
};
element.style.cssText="";
element.className="folder";
element.appendChild(img);
contentform.appendChild(element);

}
}
Kshitiz
  • 2,852
  • 5
  • 32
  • 41
  • 1
    But note the [browser support](http://caniuse.com/#feat=let) – Internet Explorer ≤10 and Safari don’t support `let` yet. – Rory O'Kane May 24 '16 at 10:49
  • thanks it's work well, but is it ok to use this keyword? because i use netbeans ide and it said this line is not correct when the browser work with it will. – Afshin Izadi May 24 '16 at 10:50