Как заставить функцию при запуске увидеть ГЛОБАЛЬНУЮ переменную?
Друзья! По загрузке документа ззапускается функция 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, время: 14:12. |