2010-05-28 15 views
98

मेरे जावास्क्रिप्ट कोड का एक समूह helpers.js नामक बाहरी फ़ाइल में है। HTML के अंदर जो इस जावास्क्रिप्ट कोड को कॉल करता है, मुझे खुद को यह जानने की आवश्यकता होती है कि helpers.js से एक निश्चित फ़ंक्शन कहलाता है या नहीं। दोनों मेरे एचटीएमएल कोड में और helpers.js मेंएकाधिक फ़ाइलों में जावास्क्रिप्ट में वैश्विक चर

var myFunctionTag = true; 

वैश्विक क्षेत्र में:

मैं परिभाषित करते हुए एक वैश्विक चर बनाने के लिए प्रयास किया है।

यहाँ मेरा html कोड कैसा दिखता है:

<html> 
... 
<script type='text/javascript' src='js/helpers.js'></script>  
... 
<script> 
    var myFunctionTag = false; 
    ... 
    //I try to use myFunctionTag here but it is always false, even though it has been se t to 'true' in helpers.js 
</script> 

क्या मैं भी संभव करने के लिए कोशिश कर रहा हूँ है?

+0

ठीक है, तुम सिर्फ * निर्धारित किया है * यह दूसरे '

15

चर .js फ़ाइल में घोषित किया जा सकता और केवल HTML फ़ाइल में संदर्भित किया है। helpers.js की मेरी संस्करण:

var myFunctionWasCalled = false; 

function doFoo() 
{ 
    if (!myFunctionWasCalled) { 
     alert("doFoo called for the very first time!"); 
     myFunctionWasCalled = true; 
    } 
    else { 
     alert("doFoo called again"); 
    } 
} 

और एक पेज यह परीक्षण करने के लिए:

<html> 
<head> 
<title>Test Page</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<script type="text/javascript" src="helpers.js"></script> 
</head> 

<body> 


<p>myFunctionWasCalled is 
<script type="text/javascript">document.write(myFunctionWasCalled);</script> 
</p> 

<script type="text/javascript">doFoo();</script> 

<p>Some stuff in between</p> 

<script type="text/javascript">doFoo();</script> 

<p>myFunctionWasCalled is 
<script type="text/javascript">document.write(myFunctionWasCalled);</script> 
</p> 

</body> 
</html> 

आप परीक्षण alert() दो अलग बातें प्रदर्शित करेगा देखेंगे, और पेज के लिए लिखा मूल्य अलग होगा दूसरी बार।

13

ठीक है, दोस्तों, यहां मेरा छोटा परीक्षण भी है। मैं एक ऐसी ही समस्या थी, तो मैं 3 स्थितियों का परीक्षण करने का फैसला किया: यह बिल्कुल काम करता है

  1. एक HTML फ़ाइल, एक बाहरी जे एस फ़ाइल ... - कार्यों एक वैश्विक वर के माध्यम से संवाद कर सकते हैं?
  2. दो HTML फ़ाइलें, एक बाहरी जेएस फ़ाइल, एक ब्राउज़र, दो टैब: क्या वे वैश्विक var के माध्यम से हस्तक्षेप करेंगे?
  3. एक HTML फ़ाइल, 2 ब्राउज़र द्वारा खुलती है, क्या यह काम करेगी और क्या वे हस्तक्षेप करेंगे?

सभी परिणाम अपेक्षित थे।

  1. यह काम करता है। फ़ंक्शंस f1() और f2() वैश्विक var के माध्यम से संवाद करते हैं (var बाहरी जेएस फ़ाइल में है, HTML फ़ाइल में नहीं)।
  2. वे हस्तक्षेप नहीं करते हैं। प्रत्येक ब्राउज़र टैब, प्रत्येक HTML पृष्ठ के लिए जेएस फ़ाइल की स्पष्ट रूप से अलग प्रतियां बनाई गई हैं।
  3. अपेक्षित रूप से सभी काम स्वतंत्र रूप से काम करते हैं।

ट्यूटोरियल्स ब्राउज़ करने के बजाय, मुझे इसे आजमाने में आसान लगता है, इसलिए मैंने किया। मेरा निष्कर्ष: जब भी आप अपने एचटीएमएल पेज में बाहरी जेएस फ़ाइल शामिल करते हैं, तो बाहरी जेएस की सामग्री पृष्ठ को प्रस्तुत करने से पहले आपके एचटीएमएल पेज में "कॉपी/पेस्ट" हो जाती है। या यदि आप करेंगे तो अपने PHP पेज में। अगर मैं यहां गलत हूं तो कृपया मुझे सही करें। थैंक्स।

मेरे उदाहरण फ़ाइलों का पालन करें:

बाहरी जे एस:

var global = 0; 

function f1() 
{ 
    alert('fired: f1'); 
    global = 1; 
    alert('global changed to 1'); 
} 

function f2() 
{ 
    alert('fired f2'); 
    alert('value of global: '+global); 
} 

एचटीएमएल 1:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<script type="text/javascript" src="external.js"></script> 
<title>External JS Globals - index.php</title> 
</head> 
<body> 
<button type="button" id="button1" onclick="f1();"> fire f1 </button> 
<br /> 
<button type="button" id="button2" onclick="f2();"> fire f2 </button> 
<br /> 
</body> 
</html> 

एचटीएमएल 2

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<script type="text/javascript" src="external.js"></script> 
<title>External JS Globals - index2.php</title> 
</head> 
<body> 
<button type="button" id="button1" onclick="f1();"> fire f1 </button> 
<br /> 
<button type="button" id="button2" onclick="f2();"> fire f2 </button> 
<br /> 
</body> 
</html> 
+1

एचटीएमएल 1 और एचटीएमएल 2 समान हैं (पेज शीर्षक को छोड़कर) ... फिर भी, मैंने दो फाइलें बनाई हैं, बस उन्हें शारीरिक रूप से अलग करने के लिए। – Martin

1

मुझे लगता है कि आप का उपयोग करना चाहिए "स्थानीय स्टोरेज "ग्लोबो के बजाए एल चर

यदि आप चिंतित हैं कि "पुराने संग्रहण" को पुराने ब्राउज़र में समर्थित नहीं किया जा सकता है, तो मौजूदा प्लग-इन का उपयोग करने पर विचार करें जो "स्थानीय संग्रहण" की उपलब्धता की जांच करता है और यदि यह उपलब्ध नहीं है तो अन्य विधियों का उपयोग करता है।

मैंने http://www.jstorage.info/ का उपयोग किया और मैं अब तक इसके साथ खुश हूं।

0

आप की तरह एक json वस्तु बना सकते हैं:

globalVariable={example_attribute:"SomeValue"}; 
fileA.js

और तरह fileB.js से यह उपयोग में

: globalVariable.example_attribute

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