मैं एक साधारण समारोह जो आईई 8 समस्या में एक स्टैक ओवरफ़्लो त्रुटि होती है किसी भी अन्य ब्राउज़र में होने के लिये हालांकि मैं परीक्षण नहीं किया है IE 7 या 6.मेरा jQuery फ़ंक्शन आईई 8 में 'स्टैक ओवरफ़्लो' त्रुटि क्यों उत्पन्न कर रहा है?
सटीक त्रुटि पालन है प्रकट नहीं होता है: -
SCRIPT28: Out of stack space
jquery.min.js, line 2 character 7498
SCRIPT2343: Stack overflow at line: 2
सवाल में समारोह:
function switchImage(size, objid, prefix, fullimage){
if(size !== 'full'){
var image = prefix + size + '/' + size +'_' + fullimage;
}
else {
var image = prefix + size + '/' + fullimage;
}
$('#' + objid).data('type', size)
.append('<img id="preload" src="' + image + '" style="display:none;" />')
.find('#preload').load(function(){
$('#' + objid).find('img').attr('src', image);
$(this).remove();
});
}
उपयोग के मामले के एक सिंहावलोकन देने के लिए मैं इस समारोह के प्रयोजन की व्याख्या करेगा:
जब कोई उपयोगकर्ता किसी छवि का आकार बदलता है (jqueryUI आकार का उपयोग करके) चौड़ाई/ऊंचाई की तुलना किसी अन्य फ़ंक्शन में की जाती है।
एक बार जब छवि एक निश्चित आकार के हो जाती है तो इस फ़ंक्शन को तब कहा जाता है जिसे आप देख सकते हैं, छवि के उच्च रिज़ॉल्यूशन संस्करण की 'src' विशेषता के साथ डीओएम में छुपा <img>
तत्व जोड़ता है (या निचला यदि छवि उपयोगकर्ता द्वारा आकार छोटा किया जा रहा है।
एक बार जब यह लोड किया गया है दिखाई तत्व की src विशेषता अद्यतन किया जाता है और छिपे हुए तत्व निकाल दिया जाता है।
इस उपयोगकर्ता आकार बदलता है के रूप में छवियों के उत्कृष्ट गतिशील स्विचिंग साबित कर दिया उन्हें छवि की गुणवत्ता को पूरे प्रक्रिया में अच्छी तरह से रखना ....
मैं केवल आईई 8 में समस्या का कारण बनने के लिए प्रतीत नहीं कर सकता। इस फ़ंक्शन के साथ कोई त्रुटि नहीं हुई है, और हालांकि त्रुटि मौजूद है, फ़ंक्शन अभी भी काम करता है जैसा कि इसे करना चाहिए (हालांकि प्रदर्शन का आकार बदलना IE में भी खराब है 8)।
किसी भी मदद की सराहना की जाएगी।
अद्यतन: मैं निम्नलिखित करने के लिए समारोह दोबारा लिख कर मूल समस्या हल हो जाती हैं लगता है: -
function switchImage(size, objid, prefix, fullimage){
var $el = $('#' + objid);
if(size !== 'full'){
var image = prefix + size + '/' + size +'_' + fullimage;
}
else {
var image = prefix + size + '/' + fullimage;
}
$el.data('type', size);
$('<img id="preload" src="' + image + '" style="display:none;" />')
.appendTo($el)
.one('load', function(){
$('#' + objid).find('img').attr('src', image);
$(this).remove();
});
}
आप देख सकते हैं, केवल वास्तविक अंतर यह है कि मैं .appendTo का उपयोग कर रहा है() .append() के साथ-साथ jQuery .one() विधि का उपयोग करके यह सुनिश्चित करने के लिए कि लोड ईवेंट केवल एक बार होता है। हालांकि चूंकि तत्व सीधे बाद में हटा दिया जाता है, मुझे समझ में नहीं आता कि इससे कोई फर्क क्यों पड़ता है।
मुझे वास्तव में यह देखने में दिलचस्पी होगी कि कोई इस पर कोई प्रकाश डाल सकता है ताकि मैं भविष्य में ऐसे मुद्दों से बचने के तरीके सीख सकूं। चीयर्स।
जब आप jQuery के एक गैर-minfied संस्करण का उपयोग करते हैं तो क्या होता है? कम से कम इस तरह आप त्रुटि के लिए एक और सार्थक संदर्भ प्राप्त करेंगे। – RobG
वही बात होती है .... प्रश्न पूछने के पांच मिनट बाद मान लीजिए ... मैंने इसे हल कर लिया है। लेकिन मुझे नहीं पता कि क्यों ... मैं अपना प्रश्न अपडेट करूंगा, क्योंकि मैं वास्तव में समझना चाहूंगा कि इस मामूली पुनर्लेखन ने एक अंतर क्यों बनाया है। – gordyr
@gordyr क्या आप हमें कोड दे सकते हैं जो फ़ंक्शन स्विच इमेज() को कुछ संदर्भ देने के लिए कहता है? –