for 루프 내부의 이벤트 핸들러가 모든 반복에서 작동하지 않는 이유는 무엇입니까?

사프 다리

Vanilla JS를 사용하여 Etch-A-Sketch 프로젝트 작업. 16 * 16 그리드를 생성하는 for 루프가있는 프로젝트에서 문제가 발생했습니다.

//makes a 16 x 16 grid - default grid
for(let i = 0; i < 16; i++){
    const div =  document.createElement('div');
    div.style.cssText = 'border: 1px solid black; flex: 1';
    container.appendChild(div);
    // div.addEventListener('mouseover', changeBackground);
    for (let j = 0; j < 16; j++){
        div2 = document.createElement('div');
        div2.classList.add('square');
        div.style.display = 'flex';
        div.appendChild(div2);  

        div2.addEventListener('mouseover', changeBackground);
    }
}

for 루프에 의해 생성 된 그리드

Inside the inner for loop I have set up an event listener which has a callback called changeBackground() - which will randomly change colour when the cursor hovers over the grid - what I was hoping for was to have any square on the grid change colour when the cursor goes over it. However from the image above, only the very last square on the grid changes colour when I hover over the grid freely, whereas any other square on the grid stays white and non-responsive. So my question is: Why is the last grid square in the bottom right the only one to change color whereas every other square remains blank?


function changeBackground(){
    let randomColor = colors[Math.floor(Math.random() * colors.length)];

    if(randomColor === '1'){
        div2.style.backgroundColor = 'red';
        console.log('red');
    } else if(randomColor === '2'){
        div2.style.backgroundColor = 'blue';
        console.log('blue');
    } else if(randomColor === '3'){
        div2.style.backgroundColor = 'yellow';
        console.log('yellow');
    } else if(randomColor === '4'){
        div2.style.backgroundColor = 'orange';
        console.log('orange');
    } else{
        div2.style.backgroundColor = 'green';
        console.log('green');
    }
}
chrisbyte

All you need to do is get that element reference in your changeBackground function

function changeBackground(e){
    var div = e.target; // the current div you want to change

    // do your stuff

    div.style.backgroundColor = 'red';
}

요소 참조를 보여주는 간단한 예제를 모았습니다. mouseover자동으로 함수에 전달되고 (사용 button했지만 모든 요소에서 작동합니다) 호출했습니다 e. 그런 다음을 사용하여 현재 요소를 꺼내야 e.target합니다.

var btns = document.getElementsByTagName('button');

for (var i = 0; i < btns.length; i++) {
  btns[i].addEventListener('mouseover', whichButton);
}

function whichButton(e) {
  var btn = e.target; // <- This is your current element (in your case, div2)
  console.log(btn);
  
  var span = document.getElementById('spanMO');
  span.textContent = btn.textContent;
}
<button>First</button><br/>
<button>Second</button><br/>
<button>Third</button><br/>

<p>
Mouseover: <span id="spanMO"></span>
</p>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이벤트 핸들러에서 이벤트가 처음에 '정의되지 않음'으로 반환되는 이유는 무엇입니까?

분류에서Dev

threejs 렌더링 함수 내부의 while 루프가 모든 프레임을 업데이트하지 않는 이유는 무엇입니까?

분류에서Dev

내 루프가 첫 번째 반복에서만 올바르게 작동하는 이유는 무엇입니까?

분류에서Dev

Powershell : 이벤트 핸들러가 for 루프 내부에있을 때 체크 박스 변경 이벤트가 유효한 결과를 제공하지 않습니다.

분류에서Dev

이벤트 핸들러가 루프에서 제대로 작동하지 않습니다.

분류에서Dev

이 클릭 이벤트 핸들러가 내 코드를 실행하지 않는 이유는 무엇입니까?

분류에서Dev

내 While 루프가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 루프가 GoogleSheets에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 루프가 asp.NET에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

MediaPlayer.seekTo () 및 onSurfaceTextureUpdated ()가 루프 내에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

루프 외부에서 Promise가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

plsql의 while 루프가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

PHP의 while 루프가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

jsfiddle의 루프 PHP가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

arm :: standardize ()가 루프의 lm 객체에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

for..in () 루프가 배열 내부의 객체를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

Vue 루프의 첫 번째 항목에 이벤트 핸들러를 추가하는 방법은 무엇입니까?

분류에서Dev

내 for 루프가 R에서 하나의 추가 반복을 실행하는 이유는 무엇입니까?

분류에서Dev

이 Mongo 쿼리는 루프 내부에서 아무 것도 반환하지 않지만 루프 본문은 작동하는 이유는 무엇입니까?

분류에서Dev

내 FOR 루프가 여기서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

이 루프에서 break ()가 작동하지 않는 이유는 무엇입니까? (그러나 중지는)

분류에서Dev

내 jQuery 루프에서 반환이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

img에서이 onclick 핸들러가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

이 키업 이벤트 핸들러가 IE9에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

이 예제에서 "for each"루프가 "for"루프처럼 작동하지 않는 이유는 무엇입니까?

분류에서Dev

.html ()로 생성 된 요소에서 .on () 핸들러가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

변경 이벤트 처리기가 내 코드에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 루프가 모든 값을 거치지 않는 이유는 무엇입니까?

분류에서Dev

내 onclick 이벤트가 작동하지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    이벤트 핸들러에서 이벤트가 처음에 '정의되지 않음'으로 반환되는 이유는 무엇입니까?

  2. 2

    threejs 렌더링 함수 내부의 while 루프가 모든 프레임을 업데이트하지 않는 이유는 무엇입니까?

  3. 3

    내 루프가 첫 번째 반복에서만 올바르게 작동하는 이유는 무엇입니까?

  4. 4

    Powershell : 이벤트 핸들러가 for 루프 내부에있을 때 체크 박스 변경 이벤트가 유효한 결과를 제공하지 않습니다.

  5. 5

    이벤트 핸들러가 루프에서 제대로 작동하지 않습니다.

  6. 6

    이 클릭 이벤트 핸들러가 내 코드를 실행하지 않는 이유는 무엇입니까?

  7. 7

    내 While 루프가 작동하지 않는 이유는 무엇입니까?

  8. 8

    내 루프가 GoogleSheets에서 작동하지 않는 이유는 무엇입니까?

  9. 9

    내 루프가 asp.NET에서 작동하지 않는 이유는 무엇입니까?

  10. 10

    MediaPlayer.seekTo () 및 onSurfaceTextureUpdated ()가 루프 내에서 작동하지 않는 이유는 무엇입니까?

  11. 11

    루프 외부에서 Promise가 작동하지 않는 이유는 무엇입니까?

  12. 12

    plsql의 while 루프가 작동하지 않는 이유는 무엇입니까?

  13. 13

    PHP의 while 루프가 작동하지 않는 이유는 무엇입니까?

  14. 14

    jsfiddle의 루프 PHP가 작동하지 않는 이유는 무엇입니까?

  15. 15

    arm :: standardize ()가 루프의 lm 객체에서 작동하지 않는 이유는 무엇입니까?

  16. 16

    for..in () 루프가 배열 내부의 객체를 반환하지 않는 이유는 무엇입니까?

  17. 17

    Vue 루프의 첫 번째 항목에 이벤트 핸들러를 추가하는 방법은 무엇입니까?

  18. 18

    내 for 루프가 R에서 하나의 추가 반복을 실행하는 이유는 무엇입니까?

  19. 19

    이 Mongo 쿼리는 루프 내부에서 아무 것도 반환하지 않지만 루프 본문은 작동하는 이유는 무엇입니까?

  20. 20

    내 FOR 루프가 여기서 작동하지 않는 이유는 무엇입니까?

  21. 21

    이 루프에서 break ()가 작동하지 않는 이유는 무엇입니까? (그러나 중지는)

  22. 22

    내 jQuery 루프에서 반환이 작동하지 않는 이유는 무엇입니까?

  23. 23

    img에서이 onclick 핸들러가 작동하지 않는 이유는 무엇입니까?

  24. 24

    이 키업 이벤트 핸들러가 IE9에서 작동하지 않는 이유는 무엇입니까?

  25. 25

    이 예제에서 "for each"루프가 "for"루프처럼 작동하지 않는 이유는 무엇입니까?

  26. 26

    .html ()로 생성 된 요소에서 .on () 핸들러가 작동하지 않는 이유는 무엇입니까?

  27. 27

    변경 이벤트 처리기가 내 코드에서 작동하지 않는 이유는 무엇입니까?

  28. 28

    내 루프가 모든 값을 거치지 않는 이유는 무엇입니까?

  29. 29

    내 onclick 이벤트가 작동하지 않는 이유는 무엇입니까?

뜨겁다태그

보관