2009-12-02 39 views
19

null निम्न जावास्क्रिप्ट कोड में क्यों मिलता है?जावास्क्रिप्ट getElementByID() काम नहीं कर रहा है

<html> 
<head> 
    <title></title> 
    <script type="text/javascript"> 
     var refButton = document.getElementById("btnButton"); 

     refButton.onclick = function() { 
      alert('I am clicked!'); 
     }; 
    </script> 
</head> 
<body> 
    <form id="form1"> 
    <div> 
     <input id="btnButton" type="button" value="Click me"/> 
    </div> 
    </form> 
</body> 
</html> 

उत्तर

52

बिंदु आप अपने समारोह बुला रहे हैं पर, शेष पृष्ठ गाया नहीं किया और इसलिए तत्व पर अस्तित्व में नहीं है उस बिंदु पर। अपने फ़ंक्शन को window.onload पर कॉल करने का प्रयास करें। कुछ इस तरह:

<html> 
<head> 
    <title></title> 
    <script type="text/javascript"> 
     window.onload = function(){ 
      var refButton = document.getElementById("btnButton"); 

      refButton.onclick = function() { 
       alert('I am clicked!'); 
      } 
     }; 
    </script> 
</head> 
<body> 
    <form id="form1"> 
    <div> 
     <input id="btnButton" type="button" value="Click me"/> 
    </div> 
    </form> 
</body> 
</html> 
+3

या डीओएम तैयार घटना को संभालने के लिए प्रोटोटाइप, JQuery या कुछ अन्य पैकेज का उपयोग करने पर विचार करें। –

+2

मुझे नहीं लगता कि उसे सिर्फ डोम तैयार कार्यक्रम के लिए पूरी लाइब्रेरी आयात करने की आवश्यकता है। ;) –

+1

@ पॉल - अच्छा बिंदु। @ जेएमएसए डीओएम तैयार घटना वास्तव में सभी छवियों को डाउनलोड करने से पहले और सभी स्क्रिप्ट के बाद डाउनलोड किया गया है और पृष्ठ डाउनलोड किया गया है। इसलिए, डीओएम तैयार घटना खिड़की से पहले आग लगती है। घटना लोड करें। :) – jaywon

8

आपको बॉडी टैग के अंत में जावास्क्रिप्ट डालने की आवश्यकता है।

यह नहीं मिला क्योंकि यह अभी तक डोम में नहीं है!

आप भी इस तरह ऑनलोड ईवेंट हैंडलर में लपेट कर सकते हैं:

window.onload = function() { 
var refButton = document.getElementById('btnButton'); 
refButton.onclick = function() { 
    alert('I am clicked!'); 
} 
} 
+0

क्या यह मानक अभ्यास है या सिर्फ इस मामले में? – anonymous

+0

मानक अभ्यास यह है कि आप पेज लोड होने के समय से निष्पादन शुरू करते हैं। –

+0

डीओएम पेड़ के निर्माण के बाद ही स्क्रिप्ट चलाने के लिए यह मानक अभ्यास है। –

3

क्योंकि स्क्रिप्ट ब्राउज़र अभी तक <body> नहीं पार्स है कार्यान्वित करता है, तो यह पता नहीं है निर्दिष्ट आईडी के साथ एक तत्व है कि वहाँ जब।

ऐसा करें:

<html> 
<head> 
    <title></title> 
    <script type="text/javascript"> 
     window.onload = (function() { 
      var refButton = document.getElementById("btnButton"); 

      refButton.onclick = function() { 
       alert('Dhoor shala!'); 
      }; 
     }); 
    </script> 
    </head> 
<body> 
    <form id="form1"> 
    <div> 
     <input id="btnButton" type="button" value="Click me"/> 
    </div> 
</form> 
</body> 
</html> 

ध्यान दें कि आप के रूप में अच्छी addEventListenerwindow.onload = ... के बजाय का उपयोग कर सकते के बाद पूरे दस्तावेज़ पार्स किया गया है कि समारोह केवल निष्पादित करने के लिए।

+1

window.onload तब तक आग नहीं आता जब तक कि पूरे दस्तावेज़ को पार्स नहीं किया गया हो और सभी फाइलें डाउनलोड हों – jaywon

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