2012-04-23 20 views
6

के बीच जावास्क्रिप्ट फ़ंक्शन स्कोप मेरे पास दो अलग-अलग जेएसपी हैं जो जावा बैकएंड एक साथ मिलकर एक ही प्रस्तुत HTML पृष्ठ पर भेजता है।स्क्रिप्ट टैग

प्रत्येक JSP अपनी ही <script> ब्लॉक है और है कि ब्लॉक के अंदर कार्यों को परिभाषित करता है:

JSP # 1:

<script type="text/javascript"> 
    function blah() { ... } 
</script> 

JSP # 2

<script type="text/javascript"> 
    function foo() 
    { 
     blah(); 
    } 
</script> 

जैसा कि मैंने कहा, बैकएंड कहते हैं ये HTTP प्रतिक्रिया के लिए और उसी अनुरोध के दौरान उन्हें ब्राउज़र पर वापस भेजता है।

जब मैं अपने ब्राउज़र में यह पृष्ठ चलाता हूं, तो मैं तुरंत बता सकता हूं कि निष्पादित नहीं हो रहा है जब foo() कॉल किया जा रहा है। मुझे फायरबग में एक कंसोल त्रुटि दिखाई देती है जिसमें blah() परिभाषित नहीं किया गया है। मुझे आश्चर्य है कि blah() में केवल अपने <script> टैग के अंदर दायरा है, और इसी प्रकार foo() के लिए भी। क्या यह मामला यहां है, या कुछ और है?

जब मैं पृष्ठ स्रोत देखने के लिए जाता हूं तो मुझे स्क्रिप्ट ब्लॉक और दोनों कार्य दोनों दिखाई देते हैं। यह मुझे बताता है कि सब कुछ ठीक से सर्वर-साइड उत्पन्न/प्रस्तुत किया जा रहा है, लेकिन शायद मेरा दृष्टिकोण मूल रूप से गलत है (विभिन्न स्क्रिप्ट टैग के अंदर कार्यों को परिभाषित करना)। अग्रिम में धन्यवाद।

+2

जब या आप कैसे कहते हैं foo()? – Philipp

+0

foo() को तब कहा जाता है जब कोई उपयोगकर्ता तत्व पर अपने माउस को घुमाता है। मैं सत्यापित कर सकता हूं कि इसे अपनी सामग्री को अलर्ट ("") कथन के साथ बदलकर बुलाया जाता है। – IAmYourFaja

उत्तर

5

उनमें से सभी वैश्विक हैं। वे एक-दूसरे को देख सकते हैं। समस्या तब होती है जब वे परिभाषित हो जाते हैं और एक-दूसरे को कॉल करते हैं।

आप को परिभाषित करने और उन्हें इस क्रम में बुलाना चाहिए:

  1. बार
  2. foo
  3. कॉल foo
    • foo मार डाला और कॉल बार
    • बार निष्पादित किया जाता है
+0

खैर, foo() को पृष्ठ शीर्षलेख के अंदर परिभाषित किया गया है, और बार() को पाद लेख के अंदर परिभाषित किया गया है। इसलिए foo() बार() से परिणामी HTML में "उच्च" (पंक्ति संख्याानुसार) दिखाई देता है। क्या यह संभव है कि, चूंकि ये सभी पृष्ठ लोड पर परिभाषित हैं, क्योंकि चूंकि foo() पहले परिभाषित हो जाता है, बार() अभी तक मौजूद नहीं है? इस मामले में, मैं बार() को पहले परिभाषित कैसे करूं (या बेहतर अभी तक, उस foo() को तब तक कॉल नहीं किया जाता जब तक कि बार() पृष्ठ लोड के दौरान पहले ही परिभाषित नहीं किया गया हो)?! – IAmYourFaja

+0

अहह, यह एक आदेश मुद्दा था। मैंने foo() की परिभाषा के ऊपर शीर्षलेख में बार() रखा है और सब ठीक है। धन्यवाद यूसुफ! – IAmYourFaja

0

जावास्क्रिप्ट में दायरा को परिभाषित करने वाली एकमात्र चीज एक कार्य है, इसलिए आपकी समस्या एक स्कोपिंग समस्या नहीं है। आप शायद foo() को कॉल नहीं कर रहे हैं, आप इसे blah() परिभाषित करने से पहले कहते हैं, या आपके पास कहीं सिंटैक्स त्रुटि है। शायद आप अपना पूरा एचटीएमएल पेज पोस्ट कर सकते हैं ताकि हम देख सकें कि क्या हो रहा है।

+0

मैं आपके इनपुट की सराहना करता हूं, लेकिन वास्तविक HTML * विशाल * है और इस गैर-एसएससीसीई को भी * पूछने योग्य * की आवश्यकता है। कृपया यूसुफ के उत्तर के नीचे मेरी टिप्पणियां देखें क्योंकि मुझे लगता है कि वह सही रास्ते पर है। अब तक आपकी सभी मदद के लिए धन्यवाद। – IAmYourFaja

+0

मैं समझता हूं। मैंने अपने उत्तर में संभावित समाधानों में से एक में भी अपने उत्तर का उल्लेख किया। यह सुनकर अच्छा लगा कि आपको यह चल रहा है – koenpeters

1

आप इस तरह फ़ंक्शन को कॉल कर सकते हैं:

(function($) { 

    var namespace; 
     namespace = { 
        something : function() { 
              alert('hello there!'); 
              }, 
         bodyInfo : function() { 
              alert($('body').attr('id')); 
              } 
        }; 
     window.ns = namespace; 
    })(this.jQuery); 

    $(function() { 
       ns.something(); 
       ns.bodyInfo(); 
    }); 
संबंधित मुद्दे