document.getElementById () VS. getElementById () - PullRequest
3 голосов
/ 12 мая 2009

Обычно я регистрирую функции javascript для определенных событий, выполняя что-то вроде:

myBtn.Attributes.Add("onClick", "Validate(getElementById('"+txtFirstName.ClientID + "'));");

Я всегда использовал getElementById сам по себе или, другими словами, без добавления документа. Но в последнее время у меня падают страницы, когда я пытаюсь использовать getElementById вместо document.getElementById. Почему это? Как ни странно, у меня есть веб-сайт, где одна страница позволяет мне использовать только getElementById, но другая другая страница выдает ошибку javascript, потому что он не может найти элемент, если я просто getElementById, и он будет работать только если сделать document.getElementById.

Кто-нибудь знает, почему это так? Должен ли я использовать document.getElementById везде, независимо от того, работает ли он без префикса документа?

EDIT: Может ли это быть связано с тем, что одна страница использует AJAX, а другая - нет?

Ответы [ 6 ]

7 голосов
/ 12 мая 2009

Когда вы используете getElementById(), и это работает, это означает, что функция, в которой она вызывается, выполняется в контексте документа, то есть это == документ.

Итак, вы должны ВСЕГДА использовать document.getElementById, чтобы избежать ошибок такого рода.

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

Ваш код выглядел бы примерно так, если бы вы использовали JQuery:

$("#myBtnID").click(function () { Validate($("#myTextboxID"))});
3 голосов
/ 12 мая 2009

Любая функция или переменная, к которой вы обращаетесь без объекта-владельца (например, document.getElementById), получит доступ к свойству из окна.

Таким образом, getElementById на самом деле является window.getElementById, который не определен изначально (если вы не определили его ранее (например: getElementById = document.getElementById).

1 голос
/ 12 мая 2009

Вы должны использовать полный document.getElementById(). Если вы находите это слишком многословным, вы можете использовать jQuery:

$('#' + id)

или вы можете создать псевдоним в верхней части вашего скрипта:

var byID = document.getElementById;
1 голос
/ 12 мая 2009

Вы должны использовать только document.getElementById (даже если бы я рекомендовал использовать библиотеки, такие как prototype или jquery, чтобы иметь возможность использовать знак $).

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

0 голосов
/ 12 мая 2009

Правильный путь действительно document.getElementById () .

Причина (предположение), что это может работать само по себе, состоит в том, что в зависимости от того, где вы его используете, текущий контекст может фактически быть объектом документа, что неявно приводит к document.getElementById ().

0 голосов
/ 12 мая 2009

Я действительно не знаю, как это объяснить, но это потому, что getElementById () находит элемент в html-структуре страницы. Некоторые браузеры знают, что по умолчанию вы хотите выполнить поиск в документе, но другим браузерам необходимо дополнительное руководство, следовательно, документ.

...