2014-05-15 13 views
22

विफलता होने के लिए पहेली को जांचें।जावास्क्रिप्ट अनकॉट संदर्भ त्रुटि फ़ंक्शन परिभाषित नहीं किया गया है

जब मैं टेक्स्ट बॉक्स में डेटा जोड़ता हूं (यहां तक ​​कि अगर मैं इसे खाली छोड़ देता हूं) और "जोड़ें" पर क्लिक करने का प्रयास करता हूं तो यह कुछ भी नहीं करता है।

क्रोम और फ़ायरफ़ॉक्स कंसोल खोलना दोनों मुझे एक ही त्रुटि देते हैं, यह कहता है "changeText2()" परिभाषित नहीं किया गया है।

मैं इसे कैसे ठीक कर सकता हूं? मैंने कई बार इस त्रुटि में भाग लिया है और ज्यादातर में यह वास्तव में अजीब कामकाज था, लेकिन मुझे यकीन नहीं है कि इससे बचने के लिए विधि या मैं क्या गलत कर रहा हूं।

ऐसा लगता है कि वैश्विक परिवर्तनीय घोषणाओं को हटाने से अधिकांश समय ठीक हो जाता है, हालांकि, मुझे इस मामले में उनकी आवश्यकता है और यह जानना होगा कि यह त्रुटि क्यों और कैसे होती है।

किसी भी और सभी मदद की बहुत सराहना की जाती है।

जावास्क्रिप्ट:

var list = document.getElementById('deliveryIdArray'); 
var names = []; 

function changeText2() { 
    var deliveryIdentification = document.getElementById('deliveryIdentification').value; 
    names.push(deliveryIdentification);//simply add new name to array; 
    //array changed re-render list 
    renderList(); 
} 

function renderList(){ 
    while (list.firstChild) { 
     list.removeChild(list.firstChild); 
    } 
    //create each li again 
    for(var i=0;i<names.length;i++){ 
     var entry = document.createElement('li'); 
     entry.appendChild(document.createTextNode(names[i])); 
     var removeButton = document.createElement('button'); 
     removeButton.appendChild(document.createTextNode("remove")); 
     removeButton.setAttribute('onClick','removeName('+i+')'); 
     entry.appendChild(removeButton); 
     list.appendChild(entry); 
    } 
} 


function removeName(nameindex){ 
    names.splice(nameindex,1); 
    //array changed re-render list 
    renderList(); 
} 

function getDeliveries(){ 
    return names; 
} 

HTML:

<b>Number(s): </b> 
    <input id = "deliveryIdentification" name = "deliveryIdentification" type = "text" size = "16" maxlength = "30"> 

    <!-- Array Area Creation --> 
    <input type='button' onclick='changeText2()' value='Add' /> 

    <ol id="deliveryIdArray"> 
    </ol> 

फिडल:http://jsfiddle.net/vSHQD/

+1

पहेली में लपेटें (बाईं ओर मेनू) "सिर में कोई लपेटें नहीं"। –

+0

@dystroy त्रुटियों का कारण बनता है क्योंकि तत्व अभी तक मौजूद नहीं हैं;) –

+0

यह आपके लिए सहायक होगा .... http: //stackoverflow.com/questions/17378199/uncaught-referenceerror-function-is-not-defined-with- ऑनक्लिक – chandu

उत्तर

77

JSFiddle में, आप रैपिंग के लिए "ऑनलोड" या "सेट जब onDomready ", आपके द्वारा परिभाषित कार्यों ओ हैं उस ब्लॉक के अंदर परिभाषित किया गया है, और बाहरी ईवेंट हैंडलर द्वारा एक्सेस नहीं किया जा सकता है।

function something(...) 

करने के लिए::

सबसे आसान ठीक बदलने के लिए है

window.something = function(...) 
+2

यह काम करता है। http://jsfiddle.net/vSHQD/1/ अद्यतन काम दिखा रहा है कि यह काम कर रहा है। तेज़ और सही उत्तर के लिए धन्यवाद। – Erick

4

बदलें से "onload"करने के लिए "No wrap - in <body>"

समारोह रैपिंग परिभाषित एक है अलग-अलग दायरे

0

यदि आप Angular.js का उपयोग कर रहे हैं तो HTML पर एम्बेड किया गया कार्य, जैसे onclick = "function()" या onchange = "function()"। वे पंजीकरण नहीं करेंगे। आपको जावास्क्रिप्ट में परिवर्तन घटनाएं करने की आवश्यकता है। जैसे:

$('#exampleBtn').click(function() { 
    function(); 
}); 
संबंधित मुद्दे

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