2011-02-17 16 views
14

मेरे पास <img> तत्व है और मैं इसकी src विशेषता बदल रहा हूं। तत्व में onload हैंडलर फ़ंक्शन संलग्न है। प्रत्येक बार जब मैं src विशेषता बदलता हूं और छवि लोड करता है तो हैंडलर फ़ंक्शन चलाना चाहिए।जावास्क्रिप्ट, छवि अधिभार() उसी छवि को लोड करते समय वेबकिट में आग नहीं डालता

क्रोम और सफारी में, यदि मैं पहले जैसा ही एक ही स्रोत असाइन करता हूं, हैंडलर फ़ंक्शन नहीं चलाया जाता है। पहले से ही उसी स्रोत को असाइन करने से पहले मैंने imgElement.src='', imgElement.src= null, imgElement.src='notExistingFile.jpg' और कोई भी काम नहीं किया है।

कृपया मदद करें। किसी को भी इससे पहले समस्या थी?

संपादित: यह पहले की तरह ही src सौंपने से पहले imgElement.src = 'कर' से काम किया:

imgElement.src = ''; 
imgElement.src = 'image.jpg'; 
+2

+1। इसने छवि को ठीक से उतार दिया और फिर से लोड करने के लिए ऑनलोड() को अनुमति दी। – ricosrealm

उत्तर

14

यह एक known bug है। यहां उस लिंक से वर्कअराउंड है:

यह कोई बग नहीं है। वेबकिट बस सख्त है। आप इस तरह, प्रतिस्थापन से पहले एक नया Image() वस्तु का दृष्टांत चाहिए :

var photo = document.getElementById('image_id'); 
var img = new Image(); 
img.addEventListener('load', myFunction, false); 
img.src = 'http://newimgsource.jpg'; 
photo.src = img.src; 
+0

धन्यवाद ... यह काम किया! – bogdan

+1

मुझे मूर्खतापूर्ण ... यह भी पहले जैसा ही स्रोत निर्दिष्ट करने से पहले imgElement.src = '' करने से भी काम करता था ... मैंने अनदेखा किया कि मेरे पास दो स्थान थे जहां मुझे – bogdan

3

मुझे लगता है कि यहां आपकी समस्या सिर्फ इतना है कि आप ऑनलोड घटना बताए जाते हैं आप src मान बदलने के बाद, तो छवि एक बार है पहले से ही कैश में लोड हो चुका है, ब्राउज़र लोड घटना के असाइनमेंट से पहले है। इसका मतलब है कि बजाय ऐसा करने का:

myImageObject.src = "something.png"; 
myImageObject.onload = myCallback; 

ऐसा करते हैं:

myImageObject.onload = myCallback; 
myImageObject.src = "something.png"; 
+0

था आईई में यह समस्या थी और वास्तव में मैं असाइन कर रहा था पहले स्रोत ... आपने जो कहा वह किया और इसे ठीक कर दिया ... धन्यवाद! – bogdan

-1

img.addEventListener के मैट गेंद के जवाब देने के लिए जोड़ने के लिए, पर विचार img.onload बजाय()।

var photo = document.getElementById('image_id'); 
var img = new Image(); 
img.onload = myFunction; 
img.src = 'http://newimgsource.jpg'; 
photo.src = img.src; 

img.onload पढ़ने और उपयोगकर्ता एजेंटों में बेहतर काम करता है। सरल imgElement.src = '' समाधान के लिए

+0

http://stackoverflow.com/questions/6348494/addeventlistener-vs-onclick – anneb

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