2013-02-16 30 views
5

मैं समारोह लोड करने के लिए HTML फ़ाइल में शामिल बाहरी जे एस से डेटा प्राप्त करने की जरूरत है, और मैं यह कर रहा हूँ:एचटीएमएल से jquery कोड के अंदर बाहरी समारोह को कैसे कॉल करें?

<body onLoad="getTicket();"> 
...... 
</body> 

या इस:

<html> 
<body> 
    <head> 
    <script src="js/jquery.js" type="text/javascript"></script> 
    <script src="js/functions.js" type="text/javascript"></script> 
    <script> 
     $(document).ready(function() { 
      getTicket(); 
     }); 
    <script> 
    </head> 
<body> 
</html> 

या इस:

<html> 
<body> 
    <head> 
    <script src="js/jquery.js" type="text/javascript"></script> 
    <script src="js/functions.js" type="text/javascript"></script> 
    <script> 
     getTicket(); 
    <script> 
    </head> 
<body> 
</html> 

और मेरे पास यह कार्य है। जेएस:

functioOne() { 

} 

functionTwo() { 

} 

$(document).ready(function() { 
    ... 
    ..... 
    function getTicket() { 
     //to do 
    } 
}); 

लेकिन does'nt काम और सांत्वना प्रदर्शन में इस:

Uncaught ReferenceError: getTicket is not defined 

सादर।

+0

आप उस बाहरी जेएस फ़ाइल को उस HTTML फ़ाइल में कैसे शामिल कर रहे हैं? – yogi

+0

आप किस ब्राउज़र का उपयोग कर रहे हैं? क्या यह आपके कंसोल में त्रुटियां उत्पन्न करता है? अगर आपके functions.js फ़ाइल के अंदर एक पार्सिंग त्रुटि है, तो ब्राउज़र शेष फ़ाइल को 'छोड़' सकता है, जिससे आपका getTicket() फ़ंक्शन '0' को परिभाषित नहीं किया जा रहा है – thaJeztah

उत्तर

9

आपका getTicket फ़ंक्शन केवल jQuery बंद (अज्ञात फ़ंक्शन) के संदर्भ (दायरे) में परिभाषित किया गया है। इसके बजाय वैश्विक दायरे में परिभाषित करें (फ़ाइल में कहीं और न कि "फ़ंक्शन पैरामीटर" के रूप में)।

यदि आपको उस दायरे से चर की आवश्यकता है, तो उन्हें नामस्थान (एक ऑब्जेक्ट) में encapsulate, या इसे window.getTicket = function() { /* ... */} के रूप में घोषित करें।

0

<script type="text/javascript src="external.js"></script> से head जोड़ें।

फिर आपको दस्तावेज़ को पूरी तरह लोड होने की प्रतीक्षा करनी होगी।

समस्या यह है कि अपने कोड इस तरह से मार डाला जाता है:

  • external.js निष्पादित
  • अपने कार्य निर्धारित नहीं है क्योंकि दस्तावेज़ समाप्त नहीं हुआ है लोड हो रहा है
  • आप अपरिभाषित समारोह फोन
  • दस्तावेज़ तैयार है

IMHO मुझे नहीं लगता कि एक अच्छा विचार $ के अंदर एक समारोह को परिभाषित करने के लिए है (Document) .ready। सामान्य रूप से उस फ़ंक्शन को परिभाषित करना आसान होगा, फिर कॉल इसे $ (दस्तावेज़) .ready के अंदर कॉल करें।

+0

इस उत्तर के लिए क्यों -1? – collimarco

+0

मैंने आपको जवाब दिया था जब आपका जवाब सिर्फ "स्क्रिप्ट टैग जोड़ें" था (जिसमें समस्या का कोई अधिकार नहीं था कि फ़ंक्शन का दायरा बंद हो गया था, जिसका अर्थ है कि वह इसे कभी नहीं देख सकता था)। अब आप इसे संपादित कर चुके हैं इसलिए मैं अन-माइनस-एंग-इट हूं। –

4

आप ऐसा कर सकता है:

$(document).ready(function() { 
    ... 
    ..... 
    window.getTicket = function() { 
    //to do 
    } 
}); 

एक बार दस्तावेज़ तैयार है, आप getTicket

+0

आपका मतलब है, कि मैंने उस कोड को बाहरी जेएस में या HTML फ़ाइल में रखा है? एचटीएमएल फाइल में – SoldierCorp

+0

। – sdepold

+0

एचटीएमएल फाइल में? नहीं, जेएस फाइल में काम करने के लिए है! – SoldierCorp

0

कॉल करने के लिए आप समारोह कॉल करने से पहले js फ़ाइल में शामिल करना चाहिए सक्षम हो जाएगा। आप ऐसा करते हैं:

<html> 
<body> 
    <head> 
    <!-- include script files here.(jquery and custom script files) --> 
    <script> 
     $(document).ready(function() { 
      getTicket(); 
     }); 
    </script> 
    </head> 
<body> 
</html> 

आप फ़ंक्शन को कॉल करने से पहले अपने स्क्रिप्ट फ़ाइल शामिल करना चाहिए। doc ready

+0

जाहिर है कि मेरे पास यह है, आपको सबसे पहले करना चाहिए। – SoldierCorp

+2

अरे आपने स्क्रिप्ट टैग को सही तरीके से बंद नहीं किया है। –

4

कोशिश function getTicket(){} बाहर डाल या:

functio One() { 

} 

function Two() { 

} 
function getTicket() { 
    //to do 
} 

$(document).ready(function() { 
... 
..... 
    getTicket(); 
}); 

शामिल किए जाने की आपका आदेश सही है कि के साथ कोई मुद्दों है।

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

यह बिल्कुल ठीक है।

+0

समस्या यह है कि getTicket() में jQuery कोड है और इसी कारण से मैं बाहर नहीं डाल सकता। – SoldierCorp

+0

मुझे कोई समस्या नहीं होनी चाहिए लेकिन आप इसे आजमा सकते हैं। – Jai

+0

@SoldierCorp तैयार भाग पर दस्तावेज़ बस यह सुनिश्चित करता है कि आपके jQuery रन से पहले डोम पॉप्युलेट हो। आप इसके बाहर कोड को परिभाषित कर सकते हैं, बस इतना लंबा है कि इसे अभी तक नहीं कहा जाता है। (अब आप एक और सवाल होना चाहिए या नहीं) – DrLivingston