Глобальные переменные отлынивают
Есть 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'. Незадача: добро не исчезает... |
Цитата:
или вернее сказать, с чего вы решили что это будет работать во всех браузерах? |
Гммм... гмммм... нафантазировал, а потом ещё и нагуглил :write:
...правда ваша - FF, Opera да Chrome за милую душу уминают, IE - как всегда: не жриот... Лады. Переведу её на id. Но вопрос-то, похоже, совсем не в этом... Как тут с глобальными переменными обстоит? По науке ли я тут требую от них помнить и чтить? |
function toggle() { var t = document.getElementById( 'area' ).style; t.display = t.display == 'none' ? '' : 'none'; } Оберните кнопки ещё в один DIV. Эту функцию вешайте на onclick внешнего DIV'-а и кнопки. Всем инпутам уберите display: none. В атрибуте style внутреннего DIV'-а пропишите display: none. |
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> По-хорошему, ваше предложение - лишь оптимизация кода. И ей быть - но только после того, как мне станет понятно, почему не работает то, что, по-моему, должно работать. Да. Ещё раз - к сути вопроса. К теме. Глобальные. Переменные. Почему не работает? |
Есть предположение, что ответ прост: после выполнения скрипта в хедаре глобальниые переменные из него нивелируются... :-?
|
Цитата:
Цитата:
И разбираться за вас, что вы такого намудрили никто не станет Поставьте фаербаг, и отлаживайте ваш код. Так все делают, и с чего бы кто-то должен был за вас по кускам собирать ваш неработающий пример, чтобы узнать из-за какой гулпости он у вас не работает |
Пардон за настойчивый тон. Все предлагают оптимизацию кода, но никто не отвечает на вопрос. Вопрос поверхностный и не требует вдумываться в код. Никто не сказал, что моё представление о ходе выполнения скрипта верно или неверно (я ламер, СИшник). Попробую ещё раз, конкретней:
После загрузки html-документа в браузер выполняется его интерпретация, дело доходит до скриптов. В скрипте заводится глобальная переменная, где-то, используется, где-то меняется... бла-бла-бла... интерпретировали скрипт, отобразили страницу, молодцы. Когда я захочу баттоном обратиться к функции из этого скрипта - застану ли я глобальную переменную в её последнем по выполнению скрипта состоянии? P.S.: как-то сложно, наверное, но пока не сориентировался, 2-й день ковыряюсь - засим плету, как могу :) P.P.S.: глупость_написал.info == NULL |
kukuyok,
Когда вы написали activatron(this); вы передали элемент <div class="itemka" id="it01" style="z-index:99;" onclick="activatron(this);">функции activatron так вот вопрос - вы где так писать учились? tekElem.getElementsByTagName('input'); |
ps: exec вам дело говорит, а то у вас код жуткострашный получается пока.
|
Цитата:
|
Цитата:
Чего все ощерились против этой конструкции? Сама функция не нравится? Или то, что в корне tekElem вместо document? Так у меня несколько дивов таких обёрточных на странице - а инпуты в данном надо активировать... Цитата:
|
Минабунга! Гран мерси, Gozar, за alert, который распихать по коду нужно было и самому догадаться..! Собака оказалась зарыта совсем не там, где её чаяли откапать! Выяснилась странная-подлая вещь: при клике на баттон сначала обрабатывается его событие onClick="...", маскирующее все инпуты, а потом... событие onClick="..." обёрточного дива, вновь показующее всю эту срамоту. Это лечимо, конечно, но... неужели при клике в какой-либо точке документа будут срабатывать все onClick'и элементов, обладающие этой точкой...?
|
|
Ого-го! Эврика! Спасибо, Gvozd!
|
Часовой пояс GMT +3, время: 22:55. |