Как заставить функцию при запуске увидеть ГЛОБАЛЬНУЮ переменную?
Друзья! По загрузке документа ззапускается функция test(), которая должна видеть ГЛОБАЛЬНУЮ переменную
Возможно ли такое? НЕ видит напрочь! Вот код <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Документ без названия</title> <script> var per= document.getElementById("ima") function test () { //var per= document.getElementById("ima") //СЕйчас эта переменная не видна! Но если объявить её локальной, тоона будет видна per.value="конец" } </script> </head> <body onload="test()"> <input name="ima" type="text" id="ima" value="начало" /> </body> </html> Собсно в нём всё понятно, при загрузке документа запускается функция test. которая должна изменить значение поля таким вот хитрым способом. Не изменяет. А если по другому объявить используемую переменную (локальной),то изменяет. Но мне надо чтобы она видела именно глобальную переменную озможно ли такое? И если нет. сразу вопрос- как быть? Я предполагаю использовать несколько функций, использующих одни и те же значения. И что мне теперь, для каждолй функции объявлять локальные переменные? Несерьёзно как-то. Извините, если что не так. Спасибо. |
Переменная то видна, а вот её значение null, потому что вы ищите элемент до того, как он появляется в документе.
|
function test() { per = document.getElementById("ima"); per.value="конец"; } Дело в том, что вы пытаетесь установить ссылку на элемент в то время как документ ещё не догружен. Глобальную переменную можно объявить прямо из функции убрав ключевое слово var - это называется неявное обьявление глобальной переменной. Выриант 2: function test() { per.value="конец"; } onload = function() { per = document.getElementById("ima"); test(); } Ключевое слово var также не используем, иначе per обьявится как локальная переменная анонимной функции. Ещё, как вариант, можно попробовать вставить код в самый конец документа, чтобы к моменту выполнения скрипта успел загрузиться input. Это кстати должно повысить скорости формирования и отображения страницы т.к. браузер не будет отвлекаться на скрипты пока не отобразит документ. |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Octane,
спс, оч познавательно. |
Ребята, спасибо большое. Я предполагал нечто, но нуждался в уточнении. А я свой вариант придумал. Ужасно, конечно (функция вызывает функцию), но работает.
var per function test () { per= document.getElementById("textfield") test_1() } function test_1 () { per.value="novoe_value" } Tim, кстати, о том, что если переменную объявить внутри функции без var, то она будет глобальной... Я думал обратное! Автор вот этого труда http://javascript.ru/tutorial/founda...last-vidimosti при всём моём уважении к нему как-то расплывчато, что ли, написал о этом. То же и в читаемой мной книге Гудмана и Моррисона. Размыто. А Вы внесли ясность. |
Цитата:
правильное решение передачи данных в функцию из вне function test(){ var per = "конец"; return per; } function test2(){ alert(test()); } |
Часовой пояс GMT +3, время: 10:32. |