Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.02.2010, 01:56
Интересующийся
Отправить личное сообщение для возжаждавший Посмотреть профиль Найти все сообщения от возжаждавший
 
Регистрация: 24.02.2010
Сообщений: 27

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

А если по другому объявить используемую переменную (локальной),то изменяет.

Но мне надо чтобы она видела именно глобальную переменную озможно ли такое? И если нет. сразу вопрос- как быть? Я предполагаю использовать несколько функций, использующих одни и те же значения. И что мне теперь, для каждолй функции объявлять локальные переменные? Несерьёзно как-то. Извините, если что не так. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 28.02.2010, 02:29
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Переменная то видна, а вот её значение null, потому что вы ищите элемент до того, как он появляется в документе.
Ответить с цитированием
  #3 (permalink)  
Старый 28.02.2010, 02:34
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

function test()
{
	per = document.getElementById("ima");
	per.value="конец";
}


Дело в том, что вы пытаетесь установить ссылку на элемент в то время как документ ещё не догружен. Глобальную переменную можно объявить прямо из функции убрав ключевое слово var - это называется неявное обьявление глобальной переменной.

Выриант 2:
function test()
{
	per.value="конец";
}


onload = function()
{
	per = document.getElementById("ima");
	test();
}

Ключевое слово var также не используем, иначе per обьявится как локальная переменная анонимной функции. Ещё, как вариант, можно попробовать вставить код в самый конец документа, чтобы к моменту выполнения скрипта успел загрузиться input. Это кстати должно повысить скорости формирования и отображения страницы т.к. браузер не будет отвлекаться на скрипты пока не отобразит документ.
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #4 (permalink)  
Старый 28.02.2010, 02:37
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Tim
Глобальную переменную можно объявить прямо из функции убрав ключевое слово var - это называется неявное обьявление глобальной переменной.
Это не глобальная переменная уже будет, а свойство объекта window
Ответить с цитированием
  #5 (permalink)  
Старый 28.02.2010, 02:40
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Цитата:
Это не глобальная переменная уже будет, а свойство объекта window
а глобальные переменные разве не свойства объекта window?
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #6 (permalink)  
Старый 28.02.2010, 02:42
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Octane
объекта window
поправка: глобального объекта

Сообщение от Tim
а глобальные переменные разве не свойства объекта window?
http://javascript.ru/blog/Dmitry-A.-....#o-peremennyh
Ответить с цитированием
  #7 (permalink)  
Старый 28.02.2010, 02:50
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Octane,
спс, оч познавательно.
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #8 (permalink)  
Старый 28.02.2010, 02:58
Интересующийся
Отправить личное сообщение для возжаждавший Посмотреть профиль Найти все сообщения от возжаждавший
 
Регистрация: 24.02.2010
Сообщений: 27

Ребята, спасибо большое. Я предполагал нечто, но нуждался в уточнении. А я свой вариант придумал. Ужасно, конечно (функция вызывает функцию), но работает.
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
при всём моём уважении к нему как-то расплывчато, что ли, написал о этом. То же и в читаемой мной книге Гудмана и Моррисона. Размыто.

А Вы внесли ясность.
Ответить с цитированием
  #9 (permalink)  
Старый 23.02.2017, 01:27
Новичок на форуме
Отправить личное сообщение для Lastron Посмотреть профиль Найти все сообщения от Lastron
 
Регистрация: 04.11.2010
Сообщений: 7

Сообщение от Tim
Выриант 2:
function test()
{
	per.value="конец";
}


onload = function()
{
	per = document.getElementById("ima");
	test();
}
дать бы по рукам за гениальность )

правильное решение передачи данных в функцию из вне

function test(){
	var per = "конец";
	return per;
}


function test2(){
	alert(test());
}

Последний раз редактировалось Lastron, 23.02.2017 в 01:31.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать локальную переменную глобальной?? Дмитрий Общие вопросы Javascript 8 02.11.2010 03:33
30(1|2) редирект от сервера. Или как лучше сделать редирект при верной отсылке форма. pizzZ AJAX и COMET 2 18.02.2010 09:06
Как разделять страницы при выводе отчета ilshat Events/DOM/Window 7 10.12.2009 10:24
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24
Как обозначить переменную выбранную в FileChooser? woo_hoo Общие вопросы Javascript 4 03.07.2008 12:58