2011-06-25 9 views
7

मैं इस टुकड़ा है कि समस्या को दर्शाता है है: ओपेरा या छिपकली में

<html> 
<head> 
    <title>height query demo</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script> 
</head> 
<body> 
    <div id="opts" style="font-size:24px; text-align: center; margin: 10px auto;"> 
    <div> 
     <img src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif" 
      alt="jquerylogo"/> 
    </div> 
    </div> 
    <h1>Demo of querying height</h1> 
    <p>The source code of this document has a DIV prior to the H1. The DIV contains a 
    subdiv which in turn contains an image.<br /> 
    Using jQuery's <tt>$(document).ready</tt>, the following processing takes place:</p> 
<ol><li>DIV queried for its height</li> 
    <li>DIV detached from the document</li> 
    <li>height value written out here: 
    <span style="font-size: larger; color: magenta;" id="hytmsg"/></li> 
    <li>DIV attached at end of document</li></ol> 
    <script type="text/javascript"> 
$(document).ready(function() { 
    var hyt = $('#opts').height(); 
    var div_for_later = $('#opts').detach(); 
    $('#hytmsg').text(''+hyt); 
    $('body').append(div_for_later); 
    }); 
    </script> 
</body> 
<html> 

लोड यह और सूची आइटम 3 में संख्या 53 की तरह कुछ समझदार है। इसे वेबकिट ब्राउज़र में लोड करें (मेरी विंडोज मशीन पर क्रोम 12, या मेरे नोकिया एन 800 पर पुराने वेबकिट संस्करण पर बनाया गया आंसू), और संख्या 0 है।

समस्या नहीं होती है, तो subdiv की सामग्री के एक चित्र नहीं है, या यदि छवि (कोई subdiv यानी) मुख्य div का एक सीधा बच्चा है। यह तब भी होता है जब पृष्ठ और छवि फ़ाइल से दोनों हों: URL (यानी, नेटवर्क अंतराल पर निर्भर नहीं)।

एक सरल परिवर्तन मैं सही ढंग से पृष्ठ लोड पर कि ऊंचाई मूल्य मिलता है, लेकिन DIV संरचित है के रूप में रखने के लिए कर सकते हैं क्या है?

+0

नोट पृष्ठ के तल पर अपने जावास्क्रिप्ट डाल करने के लिए कोई आवश्यकता नहीं है कि, यह सिर टैग के बाद जा सकते हैं (यदि वहाँ एक प्रदर्शन अंतर नहीं है पता नहीं है लेकिन जब से वेबकिट जावास्क्रिप्ट संकलित जबकि पेज लोड हो रहा है है, यह प्रदर्शन को प्रभावित कर सकता) – bcoughlan

+1

मैंने बहुत पहले नहीं पढ़ा था, विशेष रूप से दस्तावेज़-तैयार शैली स्क्रिप्ट के लिए, उन्हें अंत में डालने को बेहतर अभ्यास माना जाता है। हेड में मेरे लाइव पेज _are_ में अधिकांश स्क्रिप्ट टैग; मेरे पास बॉडी एंड पर एक छोटा सा है जो विभिन्न प्रारंभिक कार्यों को कॉल करता है। –

+0

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

उत्तर

11

$(window).load() बजाय $(document).ready()

$(window).load(function() { 
    var hyt = $('#opts').height(); 
    var div_for_later = $('#opts').detach(); 
    $('#hytmsg').text(''+hyt); 
    $('body').append(div_for_later); 
    }); 

$(document).ready() केवल सभी डोम तत्वों के लिए जाँच करता है क्योंकि सृजन किया गया है, जबकि वास्तव में $(window).load() को गति प्रदान सभी पृष्ठ सामग्री छवियों सहित, लोड किया गया है जब।

+0

धन्यवाद, इस एपीआई के सूचक के लिए भयानक – sricks

0

शैली विशेषता या सीएसएस के माध्यम से आईएमजी टैग में ऊंचाई मान जोड़ें।

+0

यह भी काम करता है, लेकिन अगर मैंने कभी भी अपनी छवि बदल दी है तो मुझे एक छोटी रखरखाव समस्या पैदा होती है, मुझे स्रोत को भी बदलने की जरूरत है। –

+0

इस फ़ायरफ़ॉक्स 12. –

+1

पर काम नहीं करता क्रोम संस्करण पर मेरे लिए काम नहीं करता है 23.0.1271.97 मीटर – nakhli

1

http://api.jquery.com/ready/

तैयार विशेष रूप से छवियों के लिए पहले से लोड होने की आग है, इसलिए वे लोड नहीं कर रहे हैं जब अपनी स्क्रिप्ट चलाता है।

आप तैयार करने के बजाय $(window).load(function() { उपयोग कर सकते हैं।

+0

धन्यवाद है। –

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