2010-05-28 3 views
98

Буква моего кода JavaScript находится во внешнем файле под названием helpers.js. Внутри HTML, который вызывает этот код JavaScript, мне нужно знать, была ли вызвана определенная функция из helpers.js.Глобальные переменные в Javascript для нескольких файлов

Я попытался создать глобальную переменную, определяя:

var myFunctionTag = true; 

В глобальном масштабе, как в моем HTML-коде и в helpers.js.

Вот что мой 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

Ну, вы только * набор * он равен false во втором блоке тега '

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

ОК, ребята, вот мой маленький тест. У меня была аналогичная проблема, поэтому я решил проверить три ситуации:

  1. Один HTML-файл, один внешний JS-файл ... работает ли он вообще - могут ли функции связываться через глобальный var?
  2. Два файла HTML, один внешний JS-файл, один браузер, две вкладки: будут ли они вмешиваться через глобальный var?
  3. Один HTML-файл, открытый двумя браузерами, будет работать, и они будут вмешиваться?

Все результаты были такими, как ожидалось.

  1. Это работает. Функции f1() и f2() взаимодействуют через глобальный var (var находится во внешнем JS-файле, а не в файле HTML).
  2. Они не мешают. По-видимому, для каждой вкладки браузера, каждой HTML-страницы, были созданы разные копии JS-файла.
  3. Все работает независимо, как и ожидалось.

Вместо того, чтобы просматривать учебники, мне было проще попробовать его, поэтому я и сделал. Мое заключение: всякий раз, когда вы добавляете внешний JS-файл на свою HTML-страницу, содержимое внешнего JS получает «копировать/вставлять» на вашу HTML-страницу до отображения страницы. Или на свою страницу PHP, если хотите. Пожалуйста, поправьте меня, если я ошибаюсь. Thanx.

Мои файлы примеров следуют:

ВНЕШНИЕ JS:

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); 
} 

HTML 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> 

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

HTML 1 и HTML 2 идентичны (кроме названия страницы) ... все же я сделал два файла, просто чтобы их физически разделить. – Martin

1

Я думаю, что вы должны использовать «локальный хранения ", а не globa l переменных.

Если вы обеспокоены тем, что «локальное хранилище» не поддерживается в очень старых браузерах, рассмотрите возможность использования существующего подключаемого модуля, который проверяет наличие «локального хранилища» и использует другие методы, если он недоступен.

Я использовал http://www.jstorage.info/, и я доволен им до сих пор.

0

Вы можете создать объект JSON как:

globalVariable={example_attribute:"SomeValue"}; 

в fileA.js

И доступ к нему из fileB.js как: globalVariable.example_attribute

Смежные вопросы