Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Глобальные переменные отлынивают (https://javascript.ru/forum/misc/11756-globalnye-peremennye-otlynivayut.html)

kukuyok 11.09.2010 23:14

Глобальные переменные отлынивают
 
Есть div с 3-мя полями input и одной кнопкой. Изначально невидимые, они появляются, если кликнуть на div'е. По заполнению инпутов всё это добро (по идее) исчезает, если кликнуть на кнопке. Адрес нужного дива ловлю следующим образом (внимание на глобальную, вроде бы, переменную tekItem)
<script type="text/javascript" charset="windows-1251;">
	tekItem;
	function activatron(tekElem)
	{
		tekItem = tekElem;
		var otkryvashka = new Array();
		otkryvashka = tekElem.getElementsByTagName('input');
		for(i=0;i<3;i++)
		{
			otkryvashka[i].style.display = 'block';
		}
		tekElem.getElementsByClassName('buttonka')[0].style.display = 'block';
		
	}
	
	function utverd()
	{
		var tekElem = tekItem;
		var zakryvashka = new Array();
		zakryvashka = tekElem.getElementsByTagName('input');
		for(i=0;i<3;i++)
		{
			zakryvashka[i].style.display = 'none';
		}
		tekElem.getElementsByClassName('buttonka')[0].style.display = 'none';
	}
</script>


на конпку навешена функция utverd(). Функцию activatron() запускаю в диве по onClick="...", передавая в неё 'this'.


Незадача: добро не исчезает...

Gvozd 11.09.2010 23:34

Цитата:

Сообщение от kukuyok
getElementsByClassName

это что такое?)
или вернее сказать, с чего вы решили что это будет работать во всех браузерах?

kukuyok 12.09.2010 00:11

Гммм... гмммм... нафантазировал, а потом ещё и нагуглил :write:

...правда ваша - FF, Opera да Chrome за милую душу уминают, IE - как всегда: не жриот...

Лады. Переведу её на id. Но вопрос-то, похоже, совсем не в этом... Как тут с глобальными переменными обстоит? По науке ли я тут требую от них помнить и чтить?

exec 12.09.2010 10:11

function toggle() {
	var t = document.getElementById( 'area' ).style;
	t.display = t.display == 'none' ? '' : 'none';
}


Оберните кнопки ещё в один DIV.
Эту функцию вешайте на onclick внешнего DIV'-а и кнопки. Всем инпутам уберите display: none. В атрибуте style внутреннего DIV'-а пропишите display: none.

kukuyok 12.09.2010 15:01

exec

'area' - это, я так понимаю, тот самый обёрточный div..? Да, вариант хороший, но у меня проблемы с позиционированием... в общем, код тела таков:

<div class="itemka" id="it01" style="z-index:99;" onclick="activatron(this);">
    <div class="avtomodel">
        <input type="textarea" id="am01" class="am_pole" value="Модель автомобиля" onfocus="select();" />
        Модель автомобиля
    </div>
        
    <div class="modchar">
        <input type="textarea"id="gp01" class="am_pole" value="Грузоподъёмность" onfocus="select();" />
        Грузоподъёмность	
    </div>
        
    <div class="bashlat">
        <input type="textarea" id="st01" class="am_pole"  value="Стоимость" onfocus="select();" /> 
        Стоимость    
    </div>
            
    <div class="buttonka">
        <input type="button" id="bt01" value="ОК" style="" onclick="utverd();" />     
    </div>
</div>


По-хорошему, ваше предложение - лишь оптимизация кода. И ей быть - но только после того, как мне станет понятно, почему не работает то, что, по-моему, должно работать. Да. Ещё раз - к сути вопроса. К теме. Глобальные. Переменные. Почему не работает?

kukuyok 12.09.2010 15:07

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

Gvozd 12.09.2010 15:34

Цитата:

Сообщение от kukuyok
после выполнения скрипта в хедаре глобальниые переменные из него нивелируются...

глупость написал.
Цитата:

Сообщение от kukuyok
Глобальные. Переменные. Почему не работает?

Глобальные. Переменные. Работают.

И разбираться за вас, что вы такого намудрили никто не станет
Поставьте фаербаг, и отлаживайте ваш код.
Так все делают, и с чего бы кто-то должен был за вас по кускам собирать ваш неработающий пример, чтобы узнать из-за какой гулпости он у вас не работает

kukuyok 12.09.2010 21:25

Пардон за настойчивый тон. Все предлагают оптимизацию кода, но никто не отвечает на вопрос. Вопрос поверхностный и не требует вдумываться в код. Никто не сказал, что моё представление о ходе выполнения скрипта верно или неверно (я ламер, СИшник). Попробую ещё раз, конкретней:


После загрузки html-документа в браузер выполняется его интерпретация, дело доходит до скриптов. В скрипте заводится глобальная переменная, где-то, используется, где-то меняется... бла-бла-бла... интерпретировали скрипт, отобразили страницу, молодцы. Когда я захочу баттоном обратиться к функции из этого скрипта - застану ли я глобальную переменную в её последнем по выполнению скрипта состоянии?

P.S.: как-то сложно, наверное, но пока не сориентировался, 2-й день ковыряюсь - засим плету, как могу :)

P.P.S.: глупость_написал.info == NULL

Gozar 12.09.2010 22:22

kukuyok,
Когда вы написали
activatron(this);

вы передали элемент
<div class="itemka" id="it01" style="z-index:99;" onclick="activatron(this);">
функции activatron

так вот вопрос - вы где так писать учились?
tekElem.getElementsByTagName('input');

Gozar 12.09.2010 22:29

ps: exec вам дело говорит, а то у вас код жуткострашный получается пока.


Часовой пояс GMT +3, время: 17:20.