2012-01-20 10 views
6

संक्षेप में, मुझे HTML को इंजेक्शन देने के बाद कॉलबैक आग लगाना चाहिए और उस HTML की सामग्री ने प्रस्तुत किया है। मुझे तुरंत नई सामग्री की ऊंचाई जानने की आवश्यकता है। कुछ इस तरह:।jQuery.html (कुछ) पता लगाता है कि इंजेक्शन पूरा होने पर

$('div').html(tonsofstuff); 
    console.log($('div').height()); //works in Firefox, but returns 0 in Chrome 
    setTimeout(function(){ 
     console.log($('div').height()); //works everywhere, but takes too long 
    },3000); 

मुद्दा कुछ ब्राउज़रों में कभी कभी है (और हमेशा क्रोम में) $ ('div') ऊंचाई() आग से पहले नई सामग्री ऊंचाई है।

मेरे कल्पना:

var height = $('div').html(tonsofstuff).height(); 

मैं इसे प्रस्तुत करने के लिए के लिए इंतज़ार कर के साथ कोई समस्या नहीं था:

$('div').html(tonsofstuff, function(){ 
     console.log($('div').height()); 
    }); 

    or even 

    $('div').html(tonsofstuff).load(function(){ 
     console.log($('div').height()); 
    }); 

उत्तर

5

यह मैं क्या कर रहा है।

+1

यह एसिंक्रोनस चीजों के साथ समस्या हो सकती है जैसे कि बाहरी विंडो में पहुंचने वाले आईफ़्रेम – Raynos

+0

मेरे उद्देश्यों के लिए सही काम करते हैं। धन्यवाद। – Fresheyeball

0

यदि क्रोम में समस्या होती है तो मुझे लगता है कि आपके द्वारा डालने वाली सामग्री में छवियां आती हैं। जब तक वे पूरी तरह से लोड नहीं होते हैं तब तक क्रोम छवियों के डिमेंशन की गणना नहीं करता है (डीओएम तैयार पर्याप्त नहीं है)। तो समस्या को ठीक करने में क्या समस्या हो सकती है window.onload ईवेंट पर आपके प्रतिपादन को निष्पादित कर रहा है। इस तरह आप सुनिश्चित करते हैं कि छवियों को लोड किया गया है और .height()/.width() ठीक काम करेगा। हालांकि मुझे एहसास है कि यह हमेशा संभव नहीं है क्योंकि window.onload घटना DOMContentLoaded के बाद बहुत अधिक निकाल दी गई है।

एक और तरीका छवि छवियों को width और height संबंधित छवि टैग के विशेषताओं के माध्यम से स्पष्ट रूप से निर्दिष्ट करना है। यदि आप छवि आकार जानते हैं तो यह काम कर सकता है। इस मामले में window.onload पर अपना तर्क करने के लिए आवश्यक नहीं है।

+0

मैंने वास्तव में यह कोशिश की। यदि उपयोगकर्ता पहले ही पृष्ठ देख चुका है, तो सामग्री कैश की जाती है, और अधिभार ट्रिगर नहीं होता है। – Fresheyeball

0

यदि आपके "टनफस्टफ" में छवियां हैं, तो सेटटाइमआउट हमला गलत दृष्टिकोण है। आपको यह जानने की जरूरत है कि छवियों में से प्रत्येक लोड हो गए हैं, फिर अपनी डोम ऊंचाई गणना करें। और इसके लिए, आपको एचटीएमएल को लोड करने, छवियों को ढूंढने, और Image Preloader Plugin की तरह somethig को कॉल का उपयोग करने की आवश्यकता हो सकती है। मैं जरूरी नहीं कि इसकी सिफारिश कर रहा हूं; यह स्वयं लिखने के लिए काफी छोटा है (हालांकि कुछ तरीकों से कुछ गठजोड़ हो सकते हैं)। मुझे पता है कि इस तरह की चीजें हैं जो बहुत अच्छी तरह से काम करनी चाहिए।

+0

बीटीडब्ल्यू, जब मैंने छवियों को कहा, मेरा मतलब * छवि टैग * था। – JayC

+0

यदि वह छवियों को लोड कर रहा है, और उनके पास निश्चित ऊंचाई है, तो वह पेज को लोड होने से पेज को बढ़ने के लिए कुछ सीएसएस जोड़ सकता है। – jrummell

+0

छवियां हैं, लेकिन मैं एक और रिफ्लो को रोकने के लिए ऊंचाई विशेषता का उपयोग करता हूं। क्रोम इसे पढ़ता है, इसलिए डोम में छवियों की प्रतीक्षा करना कोई मुद्दा नहीं है। – Fresheyeball

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