2011-10-12 4 views
5

demo에서는 랩 (wrap) 또는 (onLoad)을 사용하면 출력이 달라집니다.wrap (head) vs onLoad

제 질문은 HTML 파일에서 정확한 경고를 얻으려고합니다 : 1,2,3,4 코드에 어떤 변경이 필요합니까? 도장의 간단한 부하가 나는 모든 경고에 항상 사 가지고 : 난의

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"></script> 

<script type="text/javascript"> 
    var slider = []; 

    for (i = 0; i < 4; i++) { 

     slider[i] = function() { 

      alert([i]); 

     }; 
     dojo.addOnLoad(slider[i]); 
    } 
    </script> 

답변

3

당신은 closure가 사용할 수 있습니다. 폐쇄가 없으면 i의 범위가 원래 함수로 지정됩니다.

+0

완벽한 사람, 감사합니다. – anvd

0

값은 그들이 호출 될 때 당신의 기능을 볼 것입니다 루프의 끝에서 4입니다. 이런 식으로 뭔가 작업을해야합니다 :

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"></script> 

<script type="text/javascript"> 
var slider = []; 

for (i = 0; i < 4; i++) { 
    eval("slider[i] = function() { alert([" + i + "]);};"); 
    dojo.addOnLoad(slider[i]); 
} 
</script> 

편집 : 물론 당신은 또한 함수가 정의 할 때보다는라고 계산을하고 시도 할 수 있습니다. 예 :

var slider = []; 

for (i = 1; i < 5; i++) { 

    slider[i] = (function (i) { 

     return function() { alert([i]); } 

    })(i); 
    dojo.addOnLoad(slider[i]); 
} 

이 상태를 저장하는 다른 기능의 범위에 i을 저장합니다 :

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"></script> 

<script type="text/javascript"> 
var slider = []; 
var onLoadCounter = 0; 

var onLoadCallback = function() { 
    alert(onLoadCounter); 
    onLoadCounter++; 
}; 

for (i = 0; i < 4; i++) { 
    slider[i] = onLoadCallback; 
    dojo.addOnLoad(slider[i]); 
} 
</script> 
+0

고유 한 대안은 무엇입니까? 그렇다면 큰 평가판을 받게 될 것입니다 (더 많은 코드가 있습니다) – anvd

+2

'eval'을 사용하지 마십시오. 디버깅이 느리고 어렵습니다. – Quentin