2017-01-22 1 views
0

아주 간단한 토글 기능을 만들었습니다. 개별 ID가 6 개이고 태그가 6 개임 왜 루프 변수를 사용하여 ID를 반복 할 수 없습니까?addEventListener 내의 반복이 작동하지 않습니다.

<script> 
    var open = false; 
    var boxes = document.getElementsByClassName("boxlink"); 

    for (var i = 0; i < boxes.length; i++) { 

      boxes[i].addEventListener("click", function() { 

        var b = document.getElementById("textbox" + i); 
        toggle(b); 
       } 

       , false); 

    } 

    function toggle(obj) { 


     if (open == false) { 

      obj.style.height = 'auto'; 
      open = true; 

     } 
     else { 

      obj.style.height = '78px'; 
      open = false; 
     } 

    } 


</script> 

답변

0

당신은

// Code goes here 
 

 
var open = false; 
 
var boxes = document.getElementsByClassName("boxlink"); 
 

 
for (var i = 0; i < boxes.length; i++) { 
 

 

 
    var onClickFunction = (function(i) { 
 
    return function() { 
 

 
     var b = document.getElementById("textbox" + i); 
 
     toggle(b); 
 
    } 
 
    })(i); 
 
boxes[i].addEventListener("click",onClickFunction , false); 
 

 
} 
 

 
function toggle(obj) { 
 

 

 
    if (open == false) { 
 

 
    obj.style.height = 'auto'; 
 
    open = true; 
 

 
    } else { 
 

 
    obj.style.height = '78px'; 
 
    open = false; 
 
    } 
 

 
}

+0

멋진 루프에서 클로저를 만들 필요가, 대단히 감사합니다! 내가 이해할 수없는 유일한 것은 함수 뒤에있는 마지막 (i) 표현식입니다. –

+0

즉시 호출 함수 식 (IIFE) http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –

+0

고마워요! 한 번만 더 질문하기 :이 페이지에서 : http://kolleritsch.benjaminboehlke.com/projects.html 처음으로 "WEITERLESEN"을 클릭하면 아무 일도 일어나지 않습니다. 다시 클릭하면 코드가 잘 작동합니다. 이 문제는 모든 "WEITERLESEN"링크에 영향을 미칩니다. 왜? –

관련 문제