Когда я использую код как это, он хорошо работает:
function removeWarning() {
var systemStatus = document.getElementById("system-status");
systemStatus.innerHTML = "";
}
function indicateInvalidUsername() {
var systemStatus = document.getElementById("system-status");
systemStatus.innerHTML = "Invalid username";
}
Однако, когда я затем хочу переместиться systemStatus
чтобы быть глобальной переменной, это не работает:
var systemStatus = document.getElementById("system-status");
function removeWarning() {
systemStatus.innerHTML = "";
}
function indicateInvalidUsername() {
systemStatus.innerHTML = "Invalid username";
}
Что я, как предполагается, делаю здесь?
Это действительно зависит от того, где расположен ваш код JavaScript.
Проблема, вероятно, вызвана тем, что DOM не загружена, когда выполняется строка
var systemStatus = document.getElementById("system-status");
. Вы можете попробовать вызвать это в событии onload, или, в идеале, использовать событие типа DOM ready из фреймворка JavaScript.
SELECT
p1.SPID AS blockedSPID, p2.SPID AS blockingSPID, ...
FROM
master..sysprocesses p1
JOIN
master..sysprocesses p2 ON p1.blocked = p2.spid
Remus: Монитор активности может истекать при загрузке сервера с ошибкой 1222
В MS KB 224453 имеется много хорошего
-121--3842506-Здесь возникает проблема просто потому, что PHP сейчас интерпретирует ваш файл. Имеются вложенные функции.
Вот как в настоящее время выполняется ваш код:
function something() {
$include_file = 'test.php';
if ( file_exists($include_file) ) {
//require_once ($include_file);
$flag = 4;
function test() {
global $flag;
echo '<br/>in test flag="'.$flag.'"';
if ($flag) {
echo 'flag works';
//do something
}
}
//end require_once ($include_file);
test();
}
}
something();
exit;
Как вы видите, при присвоении значения 4
$ flag
( $ flag = 4
) вы находитесь в области действия функции что-то ()
,
В test ()
, поскольку вы объявляете $ flag
как глобальный в этой функции, $ flag
является совершенно другой переменной, глобальной для всего сценария.
Чтобы избежать этой проблемы, используйте сверхглобальный $ GLOBALS
. Это быстрее, чем использовать global
, и это путь, что вы не смешиваетесь в области проблем, как выше:
function something() {
$include_file = 'test.php';
if ( file_exists($include_file) ) {
//require_once ($include_file);
$GLOBALS['flag'] = 4;
function test() {
global $flag;
echo '<br/>in test flag="'.$GLOBALS['flag'].'"';
if ($GLOBALS['flag']) {
echo 'flag works';
//do something
}
}
//end require_once ($include_file);
test();
}
}
something();
echo $flag; //echos 4
exit;
-121--4746184- Убедитесь, что вы объявляете переменную на «корневом» уровне, вне каких-либо блоков кода.
Вы также можете удалить var
полностью, хотя это не рекомендуется и будет выдавать «строгое» предупреждение.
В соответствии с документацией в MDC можно установить глобальные переменные с помощью window.variablename
.
Я предполагаю, что system-status
объявляется после запуска объявления переменной. Таким образом, в момент объявления переменной для нее фактически устанавливается значение null?
Вы должны объявить только ее, а затем вместо этого назначить ее значение из обработчика onLoad
, потому что тогда вы будете уверены, что он правильно инициализировал (загрузил) рассматриваемый элемент.
Вы также можете попробовать поместить сценарий внизу страницы (или хотя бы где-нибудь после объявления элемента system-status
), но это не гарантирует, что всегда будет работать.
Объявить systemStatus во внешней области и назначить его в обработчике загрузки.
systemStatus = null;
function onloadHandler(evt) {
systemStatus = document.getElementById("....");
}
Или, если вам не нужен обработчик загрузки, поместите тег скрипта в конец HTML-кода.
Глобальную переменную лучше всего выразить во внешнем файле JavaScript:
var system_status;
Убедитесь, что эта переменная больше нигде не использовалась. Затем, чтобы получить доступ к переменной на вашей странице, просто укажите ее как таковую. Скажем, например, вы хотите заполнить результаты в текстовом поле,
document.getElementById("textbox1").value = system_status;
Чтобы убедиться, что объект существует, используйте функцию готовности документа jQuery.
Пример:
$(function() {
$("#textbox1")[0].value = system_status;
});