1

So I don't understand why the following doesn't work, since I used divs[i] to reference itself. It only works if I use e.target (shown in the next code). I understand that e.target refers to the element itself, so why doesn't; div[i] work in this case?

  var divs = document.querySelectorAll('div');
  for(var i = 0; i < divs.length; i++) {
    divs[i].onclick = function() {
      divs[i].style.backgroundColor = bgChange();
    }
  }

the code of e.target

  for(var i = 0; i < divs.length; i++) {
    divs[i].onclick = function(e) {
      e.target.style.backgroundColor = bgChange();
    }
  }

the code for reference

for (var i = 1; i <= 16; i++) {
  var myDiv = document.createElement('div');
  document.body.appendChild(myDiv);
}

function random(number) {
  return Math.floor(Math.random() * number);
}

function bgChange() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  return rndCol;
}
var divs = document.querySelectorAll('div');
for (var i = 0; i < divs.length; i++) {
  divs[i].onclick = function(e) {
    e.target.style.backgroundColor = bgChange();
  }
}
div {
  background-color: red;
  height: 100px;
  width: 25%;
  float: left;
}
Rajesh
  • 24,354
  • 5
  • 48
  • 79
user8783104
  • 185
  • 2
  • 11

0 Answers0