2012-02-15 21 views
35

मेरे पास 360px की सेट ऊंचाई के साथ एक कंटेनर (thetext1) है। "thetext1" में दो divs हैं - एक बाईं ओर और एक दाईं ओर तैरता है - जिसमें से दोनों सामग्री को AJAX कॉल के माध्यम से वितरित किया जाता है।jQuery ऊंचाई() एक दृश्य div पर 0 देता है - क्यों?

ऐसे समय होंगे जब इनमें से एक या अन्य divs में सामग्री 360px से अधिक हो और इसलिए मैं तदनुसार thetext1 की ऊंचाई को बढ़ाना चाहता हूं।

मेरे परीक्षण कोड

newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 

रिटर्न 0 - (मेरे चयनकर्ता सही रूप में लक्षित div पूरी तरह से गुलाबी है!)।

यह क्यों है? मुझे पता है - इस साइट पर पिछली पोस्ट के उत्तरों से - यह समाधान अतिप्रवाह जोड़ने के लिए है: छुपे हुए थेटेक्स्ट 1, लेकिन मैं समझना चाहता हूं कि क्यों rhs और lhs div की ऊंचाई प्राप्त करने का मेरा प्रयास विफल रहा है।

+1

तत्वों आप कर सकते हैं जारी कर रहे हैं ओवरफ्लो सेट करके उन्हें रखने की आवश्यकता है: अगले तत्व में बाउंडिंग बॉक्स या क्लियरिंग फ्लोट पर छिपा हुआ – Alex

+1

क्या निहित तत्व दोनों फ़्लोट किए गए हैं (बाएं और दाएं)? आपको शायद कंटेनर पर तैरने को साफ़ करना होगा ताकि वास्तव में इसमें इसके बच्चे हों। –

+1

आप कहते हैं कि सामग्री अजाक्स कॉल के माध्यम से वितरित की जाती है। क्या आप अजाक्स कॉल के बाद ऊंचाई पढ़ रहे हैं? –

उत्तर

28

यकीन है कि कोड $ (विंडो) .load [नहीं $ (document) .ready] के अंदर है

$(window).load(function() { 
    newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 
}); 
+0

क्या आप कृपया इस बारे में विस्तार से बता सकते हैं कि हम इस तरह के या इसी तरह के मामलों में document.load के बजाय window.load का उपयोग क्यों करेंगे? धन्यवाद! –

+1

ईमानदार होने के लिए, मैं 100% निश्चित नहीं हूं। यह अभी काम किया है। मेरा अनुमान है कि दस्तावेज़। पहले से ही यही है। दस्तावेजों के तत्व डाउनलोड होते हैं और डीओएम 'तैयार' होता है जबकि window.load का मतलब है कि खिड़की लोड हो गई है और आयामों की गणना की गई है। – Gazzer

+1

@ गैज़र।ओपेरा और क्रोम जैसे वेबकिट ब्राउज़र में ऊंचाई मेरे लिए 0 लौट रही थी। $ (विंडो) का उपयोग करना। लोड (फ़ंक्शन() {}); मेरे लिए काम किया धन्यवाद – Muk

7

आप अभी भी $ (दस्तावेज़) का उपयोग कर सकते हैं। जब तक आप यह देखने के लिए जांचें कि तत्व पहले लोड किया गया है या नहीं। मैं

$("_element name/id_").load(function() { 
     $(this).height(); 
}); 

साथ जाने के लिए चुना है मैं मूल रूप से समाधान मिला: http://www.fortwaynewebdevelopment.com/jquery-width-or-height-always-returns-0-fix/

और पहली प्रतिक्रिया में इस सवाल का जवाब उपयोग करने के लिए चुना है।

7

मुझे एक ही समस्या थी, और मैंने एक बात देखी, जब आप कॉल करते हैं तो div को दिखाई देने की आवश्यकता होती है। हाइट();

लेकिन, यदि div दिखाई दे रहा है, तो भी इस div के माता-पिता को दिखाई देने की आवश्यकता है। दूसरे तो तुम की गारंटी है कि माता पिता div दिखाई (प्रदर्शन! = कोई नहीं) कर रहे हैं

लेखन एक $('#div').parent().show(); एक माता पिता जाहिर कर देंगे, आप की आवश्यकता हो सकती चाहिए parent().show();

+0

मैंने सोचा कि यह मुद्दा हो सकता है। लेकिन मेरे मामले में मेरे अंदर दो छवियों के साथ एक बाउंडिंग बॉक्स है। एक छोटा है, बॉक्स के भीतर, यह उस ऊंचाई को प्राप्त करता है। लेकिन दूसरा सीमा से आगे चला जाता है (सीमा छिपी हुई छत)। 0 ऊंचाई उस पर लौट आई। बाउंडिंग बॉक्स विवरण लाने के दौरान कोई भी प्रदर्शित नहीं होता है। इसलिए यह विश्वास करना मुश्किल हो जाता है कि यह होगा। बाद में अन्य कार्यों को करने के बाद सभी ऊंचाई ठीक से पकड़ ली जाती है। –

0
newhgt = $('#thetext1').find('div.rhs').css("background", "pink")[0].getBoundingClientRect().height; 
संबंधित मुद्दे