2012-04-12 19 views
12

तो मेरे पास कोड का यह टुकड़ा है जो एक सरणी के माध्यम से लूप करता है और छवियों को लोड करता है और छवियों को लोड होने पर सूचित करता है।जावास्क्रिप्ट छवि ऑनलोड ईवेंट बाइंडिंग

for (var i = 0; i < arr.length; i++) {     
    var imageObj = new Image(); 
    imageObj.src = url[i]; 
    imageObj.onload= (function(i){ 
       return function(){ 
        console.log(i, 'loaded'); 
       } 
      })(i); 

} 

यह ठीक काम करता है। हालांकि अगर मैं ऐसा करने की कोशिश करता हूं तो यह काम नहीं करेगा

imageObj.addEventListener('onload', function(
    console.log(i, 'loaded'); 
}, false); 

समस्या क्या है? और क्या इस मामले में बंद होने से बचने के लिए मेरे पास कोई रास्ता है?

+0

एकमात्र समस्या नहीं है, लेकिन आपका दूसरा टूटा हुआ उदाहरण स्पष्ट रूप से जेएस टूटा हुआ है, 'पहली) के अंत में 'i) {' गायब है। – Lambart

+0

बस सुरक्षित पक्ष पर रहने के लिए, क्या आप पहले ईवेंट को असाइन नहीं करना चाहिए और फिर src असाइन करना चाहिए? – bashan

उत्तर

21

समस्या का एक हिस्सा: ईवेंट को onload नहीं कहा जाता है, लेकिन load। घटना श्रोता समारोह के बाहर

imageObj.addEventListener('load', function() { /* ... */ }, false); 

उसके अलावा, i के बाद से बदल जाता है, तो आप एक बंद की जरूरत है।

+1

@gillesc एक सामान्य ES5 array.forEach() आपको एक नया दायरा देगा, इसलिए आपकी बाइंडिंग हमेशा अंतिम आइटम पर सेट नहीं होती हैं। इंडेक्स के माध्यम से पुनरावृत्ति करने और अपना खुद का बंद करने से भी कम कोड होगा। – mikemaccana

संबंधित मुद्दे