2009-11-09 10 views
17

मेरे पास एक ऐसा पृष्ठ है जहां उपयोगकर्ता गतिशील रूप से फ़ाइल अपलोड बॉक्स जोड़ सकते हैं। बक्से जोड़ना उनके द्वारा दी गई div की ऊंचाई को बदलता है, लेकिन नीचे दिए गए div के कुछ तत्व एक ही स्थान पर रहते हैं, इसलिए वे नए DOM तत्वों के साथ ओवरलैप करना प्रारंभ करते हैं।आईई 7 में डीएचटीएम परिवर्तन के बाद मैं कैसे रिफ्लो को मजबूर कर सकता हूं?

यह आईई 8, फ़ायरफ़ॉक्स, क्रोम में सही ढंग से काम करता है। मैं नए डीएचटीएमएल के साथ पृष्ठ को फिर से भरने के लिए आईई 7 को कैसे मजबूर कर सकता हूं?

window.resizeBy(1, 0); 
setTimeout(UndoResize, 0); 

लेकिन यह एक विस्तृत विंडो (यह खिड़की पुनर्स्थापित करता है) के साथ काम नहीं करता है:

सबसे अच्छा समाधान मैं बाहर काम किया यह था।

उत्तर

40

प्रयास करें:

element.className = element.className; 
संशोधित div पर

(या शायद अपने माता पिता, या यहां तक ​​कि एक अधिक सुदूर पूर्वज, इस तरह के अपेक्षाकृत-तैनात रोकथाम के रूप में विभिन्न कारकों पर निर्भर करता है)।

className के रूप में एक मान दिया गया है आईई उस पृष्ठ को प्रभावित करने वाले सीएसएस को बदलने के मामले में पृष्ठ के उस हिस्से को फिर से भर देगा और पुन: पेश करेगा। सौभाग्य से, यह जांचने के लिए अनुकूलित नहीं किया गया है कि className मान वास्तव में अपने पिछले मूल्य से बदल गया है, तो उपरोक्त किसी भी चीज़ को तोड़ने के बिना रीफ्लो को ट्रिगर करेगा।

मुझे यह तय हुआ कि यह तय आईई 6 था लेकिन आईई 7 तोड़ दिया, लेकिन इसे आजमाएं और देखें कि यह आपके लिए काम करता है या नहीं।

+9

हाँ! यह समस्या शरीर के ठीक नीचे तत्वों को प्रभावित करती है, इसलिए मैं इसका उपयोग कर रहा हूं: document.body.className = document.body.className; धन्यवाद! –

+1

एमएम उत्कृष्ट फिक्स - एक आईई 7 रिफ्लो मुद्दा तय किया गया था जिसमें मुझे – John

+0

था। है। बहुत बढ़िया। – allixsenos

3

मैंने इस बिल्कुल हास्यास्पद बग (केवल आईई 7 में प्रकट) पर अविश्वसनीय मात्रा बर्बाद कर दी है, वेबपृष्ठ में यहां कोड डालने के लिए बहुत जटिल है, जहां element.className = element.className काम नहीं कर रहा था।

try{ 
    element.parentNode.style.cssText += ""; 
    element.parentNode.style.zoom = 1; 
    element.style.cssText += ""; 
    element.style.zoom = 1; 
}catch(ex){} 
:

IE7 (अच्छी तरह से, जगह में कम से कम परीक्षण किया मैं बग का सामना किया है) के लिए अंतिम समाधान नीचे लाइनों के सभी किसी भी डोम परिवर्तन करने के लिए एक हुक के रूप में क्रियान्वित किया जा रहा है

हमारे पास पहले से ही पहले दो लाइनें हैं (try-catch से घिरा हुआ है) हमारे ढांचे में लंबे समय तक, लेकिन यह कुछ विशेष परिदृश्य में अपर्याप्त हो गया, लेकिन अगले दो इसे जोड़कर जोड़ा गया।

अधिकतम और गैर-अधिकतम विंडो में परीक्षण किया गया।

try/catch जगह पर है क्योंकि कुछ निश्चित परिस्थितियों में (उदा। iframe के अंदर) यह एक जेएस त्रुटि उत्पन्न कर सकता है जो ऐप तोड़ देगा (यह मेरी टीम के साथी से जानकारी है, मुझे इसे स्वयं सामना नहीं हुआ है)।

इसके विपरीत, IE8 के लिए, element.className = element.className अपना काम कर रही करने के लिए (हाँ, हम सब एक संस्करण के लिए सशर्त कोड प्यार ...)

मैं विन XP प्यार एक OS के रूप में लगता है, लेकिन आईई बाध्य तक लोग इसका इस्तेमाल करते हैं, हमें ऐसी पागल समस्याओं के लिए गंदे फिक्स मिलना पड़ता है ... बहुत दुखद।


संपादित 2013.03.05

स्निपेट के ऊपर परिदृश्यों के अधिकांश में काम करने लग रहा था, लेकिन यह भी एक ही स्थान पर पर्याप्त नहीं था।अब हमारे पास हमारे कोड में इस तरह की चीजें हैं:

try { 
    var s1 = domElt.parentNode.style, s2 = domElt.style; 
    var dummyCss = "foo:foo;"; // do not add leading ';' here! 
    s1.cssText += ""; 
    s1.zoom = 1; 
    s2.cssText += dummyCss; 
    s2.cssText = s2.cssText.replace(dummyCss, ""); 
} catch (ex) {} 
संबंधित मुद्दे

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