2012-01-05 18 views
24

document.getElementById('id of div that definately exists') शून्य लौटाता है।getElementById शून्य वापस आता है?

मैंने मूल रूप से जावास्क्रिप्ट को लोड किया ताकि यह सुनिश्चित किया जा सके कि मुझे ऑनलोड ईवेंट के बारे में चिंता करने की आवश्यकता नहीं है। मैंने ऑनलोड ईवेंट का उपयोग करने का भी प्रयास किया। यह बहुत डरावना है। किसी भी विचार या मदद की सराहना की जाएगी।

+2

की [क्यों jQuery या इस तरह के getElementById के रूप में एक डोम विधि नहीं तत्व मिल रहा है?] (Http://stackoverflow.com/q/14028959/1048572) – Bergi

+0

मैं डुप्लिकेट ऐसी ही स्थिति थी जहां मेरी सामग्री गतिशील रूप से जेनरेट की गई थी और स्क्रिप्ट पूछताछ आईडी को उस आईडी के साथ सामग्री बनाने वाली स्क्रिप्ट से पहले बुलाया जा रहा था ..मैंने उस आदेश को ठीक किया और यह मेरे लिए काम किया –

उत्तर

31

यह कारण हो सकता है:

  1. अमान्य HTML वाक्य रचना (कुछ टैग बंद नहीं है या इसी तरह की त्रुटि)
  2. डुप्लीकेट आईडी - वहाँ एक ही आईडी
  3. शायद तत्व के साथ दो HTML डोम तत्व हैं आप आईडी द्वारा प्राप्त करने की कोशिश कर रहे हैं गतिशील रूप से बनाया गया है (AJAX द्वारा लोड या स्क्रिप्ट द्वारा बनाई गई)?

कृपया, अपना कोड पोस्ट करें।

+9

# 2 वास्तव में 'शून्य' नहीं मिलेगा, लेकिन उस आईडी के साथ केवल दो तत्वों में से पहला होगा। – Bergi

+0

धन्यवाद मेरे जीवन को बचाया –

7

वहाँ कई कारण है कि document.getElementById

  • आपने एक अवैध आईडी

    आईडी और नाम टोकन एक पत्र के साथ शुरू होगा ([a-zA-z] है काम नहीं करता है हो सकता है) और उसके बाद किसी भी संख्या, अक्षरों ([0-9]), हाइफ़न ("-"), अंडरस्कोर ("_"), कोलन (":"), और अवधि ("।") हो सकती है। (संसाधन: What are valid values for the id attribute in HTML?)

  • आप कुछ आईडी है कि आप पहले से ही (जैसे कॉपीराइट, लेखक ...) यह अजीब लग रहा है लेकिन मुझे क्या हुआ अपने शीर्षक में <meta> नाम के रूप में प्रयोग किया जाता है प्रयोग किया है: यदि आपके 'आईई का उपयोग कर रहे पर देखें (संसाधन: http://www.phpied.com/getelementbyid-description-in-ie/)

  • आप फ्रेम या आईफ्रेम के अंदर एक तत्व को लक्षित कर रहे हैं। इस मामले में iframe माता पिता की ही डोमेन के पृष्ठ लोड करने पर अगर आप तत्व की तलाश से पहले contentdocument को लक्षित करना चाहिए (संसाधन: Calling a specific id inside a frame)

  • आप बस एक तत्व करने के लिए देख रहे हैं जब नोड नहीं है प्रभावी रूप से डोम में लोड, या हो सकता है यह एक सरल गलत वर्तनी

मुझे शक है कि आप एक ही आईडी दो बार या एक से अधिक प्रयोग किया जाता है: उस मामले में document.getElementById लौटना चाहिए कम से कम पहला तत्व

+0

आईफ्रेम टिप के लिए धन्यवाद, मुझे एक गुच्छा की मदद की! –

41

भी सावधान रहना है आप कैसे अमल पेज पर जेएस ई। उदाहरण के लिए यदि आप ऐसा कुछ करते हैं:

(function(window, document, undefined){ 

    var foo = document.getElementById("foo"); 

    console.log(foo); 

})(window, document, undefined); 

यह शून्य हो जाएगा क्योंकि आप लोड होने से पहले दस्तावेज़ को कॉल करेंगे।

बेहतर विकल्प ..

(function(window, document, undefined){ 

// code that should be taken care of right away 

window.onload = init; 

    function init(){ 
    // the code to be called when the dom has loaded 
    // #document has its nodes 
    } 

})(window, document, undefined); 
संबंधित मुद्दे