2011-10-12 25 views
5

Trong số demo, tôi nhận được các đầu ra khác nhau, nếu tôi sử dụng (không quấn) hoặc (onLoad).không quấn (đầu) vs onLoad

Câu hỏi của tôi là, trong tệp html, để nhận được cảnh báo chính xác: 1,2,3,4 cần thay đổi gì trong mã? Với một tải đơn giản của dojo tôi luôn nhận được 4 trong tất cả các cảnh báo:

<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> 

Trả lời

3

Bạn có thể sử dụng một closure:

var slider = []; 

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

    slider[i] = (function (i) { 

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

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

này sẽ tiết kiệm được i vào một chức năng tiết kiệm nhà nước phạm vi. Nếu không có đóng cửa, i là phạm vi chức năng ban đầu.

+0

người đàn ông hoàn hảo, cảm ơn – anvd

0

Giá trị của i là 4 ở cuối vòng lặp, đó là chức năng của bạn khi chúng được gọi. Một cái gì đó như thế này nên làm việc:

<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> 

Edit: tốt bạn cũng có thể thử làm đếm khi chức năng này được gọi là chứ không phải là khi chúng được xác định. ví dụ.

<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

Đây là lựa chọn duy nhất? Nếu vậy, tôi sẽ nhận được một eval lớn (có nhiều mã) – anvd

+2

Không sử dụng 'eval'. Nó là chậm và khó gỡ lỗi. – Quentin

Các vấn đề liên quan