2013-01-08 17 views
18

इम जिन्हें आप नीचे देख वेब निरीक्षक में एक त्रुटि मिल रही है नहीं हैJavascript त्रुटि अशक्त एक वस्तु

var myButton = document.getElementById("myButton"); 
var myTextfield = document.getElementById("myTextfield"); 

function greetUser(userName) { 
var greeting = "Hello " + userName + "!"; 
document.getElementsByTagName ("h2")[0].innerHTML = greeting; 
} 

myButton.onclick = function() { 
var userName = myTextfield.value; 
greetUser(userName); 

return false; 

} 

कोई विचार क्यों मुझे त्रुटि मिल रही है?

+0

यह आपकी समस्या नहीं है, लेकिन मैं बटन पर 'क्लिक' ईवेंट हैंडलर के बजाय फ़ॉर्म पर 'सबमिट' ईवेंट हैंडलर का उपयोग करने की अनुशंसा करता हूं। फिर अगर कोई भी प्रवेश करता है तो यह काम करेगा। – icktoofay

उत्तर

26

कोड डालें ताकि तत्वों को परिभाषित करने के बाद इसे निष्पादित किया जा सके, या तो डीओएम तैयार कॉलबैक के साथ या HTML में तत्वों के तहत स्रोत रखें।

document.getElementById()null लौटाता है यदि तत्व नहीं मिला। संपत्ति असाइनमेंट केवल वस्तुओं पर हो सकता है। null कोई ऑब्जेक्ट नहीं है (typeof कहता है इसके विपरीत)।

+0

हाय एलेक्स त्वरित जवाब के लिए धन्यवाद मैंने स्रोत को स्थानांतरित कर दिया। जावास्क्रिप्ट में नया होने के नाते आप समझा सकते हैं कि एक डोम तैयार कॉलबैक क्या है? लेकिन आपके उत्तर के लिए धन्यवाद यह मदद मिली :) –

+1

@MarkH मैं कर सकता था, लेकिन [यहां एक बेहतर स्पष्टीकरण है] (http://stackoverflow.com/questions/978740/javascript-how-to-detect-if-document-has- लोड-यानी-7-फ़ायरफ़ॉक्स -3)। – alex

+0

मुझे यह त्रुटि है - मैं इस जवाब पर अस्पष्ट हूं। एलेक्स का अर्थ है 'एचटीएमएल में तत्वों के तहत स्रोत रखें'? – LaurelS

0

बाद में अपना जावास्क्रिप्ट लोड करने का प्रयास करें।

इस प्रयास करें:

<h2>Hello World!</h2> 
<p id="myParagraph">This is an example website</p> 

<form> 
    <input type="text" id="myTextfield" placeholder="Type your name" /> 
    <input type="submit" id="myButton" value="Go" /> 
</form> 

<script src="js/script.js" type="text/javascript"></script> 
0

मुझे यकीन है कि डोम भरी हुई है बनाने के बारे में एलेक्स के साथ सहमत हैं। मुझे यह भी लगता है कि सबमिट बटन रीफ्रेश ट्रिगर करेगा।

यह मैं

<html> 
<head> 
<title>webpage</title> 
</head> 
<script type="text/javascript"> 
var myButton; 
var myTextfield; 

function setup() { 
    myButton = document.getElementById("myButton"); 
    myTextfield = document.getElementById("myTextfield"); 
    myButton.onclick = function() { 
    var userName = myTextfield.value; 
    greetUser(userName); 
    return false; 
    } 
} 

function greetUser(userName) { 
    var greeting = "Hello " + userName + "!"; 
    document.getElementsByTagName("h2")[0].innerHTML = greeting; 
} 

</script> 
<body onload="setup()"> 
    <h2>Hello World!</h2> 
    <p id="myParagraph">This is an example website</p> 

    <form> 
    <input type="text" id="myTextfield" placeholder="Type your name" /> 
    <input type="button" id="myButton" value="Go" /> 
    </form> 
    </body> 
</html> 

मजा क्या करना होगा है!

4

कोई भी जेएस कोड जो डीओएम तत्वों को निष्पादित और डीओएम तत्वों के साथ सौदा करता है, डीओएम तत्वों के निर्माण के बाद निष्पादित होना चाहिए। एचटीएमएल में डाले गए जेएस कोड को ऊपर से नीचे तक व्याख्या किया गया है। इसलिए, यदि DOM तत्वों से पहले कोई टैग है, तो स्क्रिप्ट टैग के भीतर जेएस कोड निष्पादित होगा क्योंकि ब्राउज़र HTML पृष्ठ को पार करता है।

तो, अपने मामले में, आप अपने डीओएम इंटरैक्टिंग कोड को फ़ंक्शन के अंदर डाल सकते हैं ताकि केवल फ़ंक्शन को परिभाषित किया जा सके लेकिन निष्पादित नहीं किया जा सके।

फिर आप फ़ंक्शन निष्पादित करने के लिए दस्तावेज़ लोड के लिए इवेंट श्रोता जोड़ सकते हैं।

है कि आप की तरह कुछ दे देंगे:

<script> 
    function init() { 
    var myButton = document.getElementById("myButton"); 
    var myTextfield = document.getElementById("myTextfield"); 
    myButton.onclick = function() { 
     var userName = myTextfield.value; 
     greetUser(userName); 
    } 
    } 

    function greetUser(userName) { 
    var greeting = "Hello " + userName + "!"; 
    document.getElementsByTagName ("h2")[0].innerHTML = greeting; 
    } 

    document.addEventListener('readystatechange', function() { 
    if (document.readyState === "complete") { 
     init(); 
    } 
    }); 

</script> 
<h2>Hello World!</h2> 
<p id="myParagraph">This is an example website</p> 

<form> 
    <input type="text" id="myTextfield" placeholder="Type your name" /> 
    <input type="button" id="myButton" value="Go" /> 
</form> 

फिडल पर - http://jsfiddle.net/poonia/qQMEg/4/

2

मुझे लगता है कि त्रुटि क्योंकि तत्वों, अपरिभाषित हैं, ताकि आप window.onload घटना है जो इस स्थिति में आपका तत्वों परिभाषित करेगा जोड़ने की जरूरत जब खिड़की लोड हो जाती है।

window.addEventListener('load',Loaded,false); 


    function Loaded(){ 
    var myButton = document.getElementById("myButton"); 
    var myTextfield = document.getElementById("myTextfield"); 

    function greetUser(userName) { 
    var greeting = "Hello " + userName + "!"; 
    document.getElementsByTagName ("h2")[0].innerHTML = greeting; 
    } 

    myButton.onclick = function() { 
    var userName = myTextfield.value; 
    greetUser(userName); 

    return false; 
    } 
    } 
संबंधित मुद्दे