javascript: нельзя использовать глобальную переменную в функции, чтобы перемещаться в домене - PullRequest
0 голосов
/ 10 октября 2010

новичок здесь ... что мне не хватает?

я определяю глобальную переменную, которая является ссылкой на элемент html:

         var x=document.getElementById("xxx1");

затем внутри функции попробуйте ссылаться на эту переменную для навигации по dom:

        x.innerHTML="dsfgfdgdf";

... не работает; если я определяю переменную внутри функции, она работает, но я не понимаю, как это проблема области видимости ... работа с глобальными переменными внутри функций работает нормально, если я не использую их в контексте dom (object.property)

спасибо

Ответы [ 4 ]

2 голосов
/ 10 октября 2010

Это не проблема области действия.

Наиболее вероятная причина в том, что элемент еще не существует при создании переменной.Вы должны поместить элемент script, который создает переменную после элемента, к которому вы хотите получить доступ, так как код будет выполняться во время загрузки страницы.

Другой альтернативой является объявление переменной глобально и установка ее изСобытие onload, которое запускается после загрузки страницы:

<script>

var x;

function init() {
  x = document.getElementById('xxx1');
}

</script>

<body onload="init();">
2 голосов
/ 10 октября 2010

Выполнен ли getElementById до загрузки DOM? (вам следует подождать domready или onload)

Возможно ли перезаписать значение в какой-либо другой функции?

1 голос
/ 10 октября 2010

Возможно, ваша страница загружена не полностью, когда вы вызываете getElementById.

Убедитесь, что вы создали глобальную переменную x, когда страница закончила загрузку.В большинстве библиотек есть способ справиться с этим, например, в jQuery есть функция «ready».Если вы не хотите использовать какие-либо библиотеки, вы всегда можете создать переменную, когда элемент body вызывает событие onload.

jQuery-стиль:

$(function(){
    // create X here
})

стиль загрузки тела:

<body onload="aFunctionThatCreatesYourVariable()">
1 голос
/ 10 октября 2010

Я думаю, что проблема может заключаться в том, что если вы объявляете эту переменную глобально, когда эта строка оценивается, DOM загружается не полностью, и, следовательно, элемент недоступен.

Когда вы объявляете это в функции, переменная будет создаваться только при вызове этой функции, когда DOM, скорее всего, уже будет полностью загружен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...