| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Получение значения указателя объекта |
| Автор: Gwire 8.7.2008, 19:24 | ||||||||
У меня есть станицы на которой много элементов тегов <select>, <input>, <textarea> и др. Причем их количество на каждой из станиц разное, разные параметры. Одни видемые другие нет. В процессе выполнения скрипта мне нужно деактивировать все элементы. Пример деактивации всех объектов для <input>:
Аналогично для <select> и <textarea>. Позже мне нужно востановить значения активности. Допустим так:
И вроде все нортально, но у меня есть необходимось в этот массив сохранить не только "Elements[i].disabled", а еще и "document.body.scroll", "document.body.bgColor", "document.body.onclick" и др. Я питаюсь найти альтернативу запоминания порядка "push-ирования". Через простое сохранение значения указателя:
Подскажите 1) как структуры определяются в javascript и 2) как получить указатель на объект? |
| Автор: bars80080 9.7.2008, 09:17 |
| деактивация? а с какой целью? мож проще залить всё сверху сплошным слоем, через который не пробиться? |
| Автор: Gwire 9.7.2008, 10:26 | ||
Поповоду "проще залить всё сверху сплошным слоем" я использую такую конструкцию:
но есть одно "НО" с помощью [TAB] можно перейти на закритые объекты. По тому-то и нужна деактивация. 1) как получить указатель на объект и 2) как определяются структуры в javascript? |
| Автор: bars80080 9.7.2008, 11:24 | ||
нет, ну почему, может быть удастся пройти по DOM и деактивировать всё подряд:
|
| Автор: Gwire 9.7.2008, 12:13 |
А как на счет: структур в javascript и получения указателя на объект? |
| Автор: dsCode 9.7.2008, 12:17 | ||||
в JS эту роль играют объекты (хэши):
в JS нет указателей; присваивая переменной объект, можно на него сослаться:
|
| Автор: Gwire 10.7.2008, 10:12 | ||
| Такой пример: Мне нужно сохранить значения document.body.scroll, "document.getElementsByTagName('input')[0..n].disable", document.body.onload, document.title, и еще много другой информации в массив. Понятно, что это все примитивы а не объекты. Если сохранять объекты, например document.body, то я не буду знать, какие данные мне нужно востанавливать onload или scroll, или то и другое. Хотелось бы чтобы можно было осуществить такой алгоритм:
|
| Автор: Sannis 10.7.2008, 12:40 |
| А не проще ли ловить табуляцию по событию и прекращать его, вроде ж можно так? |
| Автор: ksnk 12.7.2008, 10:44 | ||||||
| Толком не догнал, что-же нужно топикстартеру Насколько удалось понять - нужно сохранить "предыдущее состояние" "окна" и уметь восстанавливать его обратно. Понятно, что абстрактная задача имеет абстрактную область применения, так что добавим конкретики. "Окно" - состояние дерева объектов. Под "состоянием" будем иметь ввиду набор свойств (зафиксированный набор) какой-то веточки этого дерева. Итого - решение становиться несколько более очевидным. Нужно каждое действие по изменению состояния записывать в какой-то лог, а затем, по этому логу восстанавливать обратно. Чтобы "пометить" изменяемый объект - мы будем присваивать ему новый уникальный идентификатор, если, у него его не было.
Теперь сочиним функции изменения свойства и записи в лог. Зафиксируем набор свойств - пусть это будет backgroundColor и display.
Ну и восстанавливать обратно по логу состояние объектов
Помогло? |
| Автор: Gwire 16.7.2008, 10:56 |
| Над таким решением я уже думал. Правда не так "прямо" (у меня черт ногу сломит). Но этот вариант не подходит из-за не универсальности. Функция должна принимать совершенно произвольные значения, заранее не известные. |
| Автор: ksnk 16.7.2008, 15:29 |
| Если функция принимает совершенно неизвестные значения, то и сделать она сможет только неизвестно что ;-) Задача должна ставится конкретно, тогда и решение надется само... |
| Автор: Gwire 22.7.2008, 12:18 | ||
Возможно код объяснит лучше, что именно я питаюсь добиться.
|
| Автор: ksnk 22.7.2008, 14:30 |
| Gwire, Нет. Паскаль не подходит. Нужно попытаться словами объяснить что-же надо сделать. Это очень сильная магия! После формулировки правильными словами многие задачи решаются сами. Еще интересует почему предложенная мной схема отличается принципиально от приведенной в Паскальном тексте? |
| Автор: Gwire 23.7.2008, 15:28 | ||
| Незнание ответа влечет за собой формулировку вариантов решения. Вариантов, не всегда, как стает известно в последствии, подходящих для решения паставленной задачи. Алгоритм решения этой задачи не должен ссылаться не накие либо елеленты кроме переменной значение которой нужно сохранить. Функции должно быть совершенно все равно какому объекту пренадлежит переменная. Приведений мной выше пример на Delphi перевести на javascript несоставляет труда, кроме конструкций "@Val" (получение адреса) и "P^" (обращение к значению). P.S. dsCode Хочу заметить..,
что перемення функции не содержит указатель на фукцию (строки 5 и 6), как это происходит с объектами и значения присваиваются так же как и у примитивов. |
| Автор: krundetz 23.7.2008, 16:36 |
| Насколько я понял проблема в том что у вас есть некий массив который содержит разномастные элементы и вам необходимо пробежаться по нему и продесаблить все элемены формы. Если я прав то посмотрите в сторону проверки типа DOM элемента. Ведь DOM элементы это обекты и у них уже есть определеные свойтва которые можно использовать и которые указывают на тип элемента. Вроде это свойство называется nodeType, но это не точно уточните в справочнике. |
| Автор: dsCode 23.7.2008, 16:41 | ||||
В строке 5 Вы Test_2_Func присваиваете новое значение. И с объектами ничего подобного не происходит. Речь шла о том, что, если изменить свойство, то оно поменяется в оригинальном объекте.
|
| Автор: ksnk 23.7.2008, 16:51 | ||
Специфика JS не позволяет хранить чистые указатели, но, как всегда, есть "обходной путь"
получилось покороче. чем на Паскале |
| Автор: Gwire 24.7.2008, 12:58 | ||
Не намного
ksnk: А вообще решение интересное. Спасибо. |