1

Here i am created the button element with onclick function dynamically, I need to pass arguments through that onclick function to main function.but its not working I need some guidance ...

var ar=["london","tokyo","india","pakistan"];
var cr=["green","blue","orange","pink"];
for(var j=0;j<ar.length;j++)
{

    var but=document.createElement("button");
    but.classList.add("divs");
    but.onclick = function() {
        myfun(ar[j],this,cr[j]);
    }
   but.textContent=ar[j];
   document.getElementById("main").appendChild(but);
  }

  function myfun(city,elemt,color)
 {
     var butt=document.getElementsByClassName("divs");
     for(var z=0;z<butt.length;z++)
 {
     butt[z].style.backgroundColor="";
  } 
 document.getElementById(city).style.display="block";
 elemt.style.backgroundColor=color;


  }
Lakshmi Ram
  • 11
  • 1
  • 7
  • You might be running into closure issues in for loops: https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example. Also, wheny ou say it is not working: please elabourate on *what* is exactly broken and not working as expected. – Terry Apr 21 '20 at 12:54

1 Answers1

0

var ar = ["london", "tokyo", "india", "pakistan"];
var cr = ["green", "blue", "orange", "pink"];
for (var j = 0; j < ar.length; j++) {
    let jj = j;          //add this
    var but = document.createElement("button");
    but.classList.add("divs");
    but.id = ar[j];    // and dont forget this
    but.onclick = function () {
        myfun(ar[jj], this, cr[jj]); //must use jj when click j will = 4
    }
    but.textContent = ar[j];
    document.getElementById("main").appendChild(but);
}

function myfun(city, elemt, color) {
    var butt = document.getElementsByClassName("divs");
    for (var z = 0; z < butt.length; z++) {
        butt[z].style.backgroundColor = "";
    }
    document.getElementById(city).style.display = "block";
    elemt.style.backgroundColor = color;


}
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body id="main">

</body>
</html>
IvaMuxa
  • 136
  • 5