Форум сетевых администраторов
Показаны 11 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- Java/Java Scripts (http://netadmin.ws/forum/forumdisplay.php?forumid=9)
-- Доступ к объектам создаваемым на лету (http://netadmin.ws/forum/showthread.php?threadid=10985)


Помещено polo 28-08-2005 в 01:15:

Доступ к объектам создаваемым на лету

Ситуация такая: Есть на странице группа чекбоксов, у каждого уникальный ID типа cb_n_nn
n - уникальное число группы
nn - id элемента

Посредствам JS из списка можно выбрать опции которые налету прибавляют к существующим чекбоксам дополнительные. Для добовления используется innerHTML. Проблема в том что нужно получить доступ к объектам чекбокса, для этого используем
document.getElementById(cb_n_nn)
Все хорошо работает с теми боксами которые существуют уже в страничке а вот к новым, которые были добавленны потом при помощи JS доступа нет, как-будто их не существует. Как с этим бороться?

__________________
Всегда есть решение.


Помещено RaZEr 28-08-2005 в 01:57:

Если попытка доступа буквально в той же ф-ии что и создание, то не лишним попробовать setTimeout(). Возможно объекты просто не успели создаться.

__________________
The time was broken ...


Помещено polo 28-08-2005 в 02:04:

В тойже функции, но уже при повторном вызове. Ð_то вообще нужно для того чтобы проверить выбран ли бокс и если выбран то при обновлении списка вывести выбранные тоже с галочкой. Кстати, забыл сказать: объекты создаються обычным html, в этом наверное и проблема. Есть ли в таком случае возможность обратится к ним?

__________________
Всегда есть решение.


Помещено RaZEr 28-08-2005 в 02:12:

Я вообще припоминаю что ИЕ не понимал объекты созданные через DOM, но с inner/outer html вроде всё было в порядке.

__________________
The time was broken ...


Помещено polo 28-08-2005 в 02:43:

К сожелению нет . Ни ИЕ ни firefox их не видит.

__________________
Всегда есть решение.


Помещено RaZEr 28-08-2005 в 11:01:

Даже gecko не видит? Странно. И какую ошибку он выдаёт?

__________________
The time was broken ...


Помещено polo 28-08-2005 в 11:32:

нет ошибок, ну конечно я проверяю существует ли объект, но если допукать ошибку то выдает:
var_name has no properties

__________________
Всегда есть решение.


Помещено RaZEr 28-08-2005 в 13:13:

Так это не ошибка доступа, а отсутствие объекта. Скорей всего ты где-то ошибся в ID или объект не был создан вообще.

В частности gecko-браузеры вообще не имеют свойства innerHtml. Его надо реализовывать дописывая прототип для HTMLElement.

__________________
The time was broken ...


Помещено polo 28-08-2005 в 19:46:

RaZEr никаких ошибок нет, уже повторно с этим сталкиваюсь. прототип создан и innerHtml работает прекрасно. Потом при выводе массива _POST все данные созданные динамически через JS присудствуют.

polo добавил 28-08-2005 в 20:22:05:
Вот пример того что я пытаюсь сделать:

code:

<SCRIPT>
// Emulation of innerText for Mozilla.
if (window.HTMLElement && window.HTMLElement.prototype.__defineSetter__) {
  HTMLElement.prototype.__defineSetter__("innerText", function (sText) {
     this.innerHTML = sText.replace(/\&/g, "&").replace(/</g, "&lt;").replace(/>/g, "&gt;");
  });
  HTMLElement.prototype.__defineGetter__("innerText", function () {
     var r = this.ownerDocument.createRange();
     r.selectNodeContents(this);
     return r.toString();
  });
}
function add_com()
{
	// получаем данные объекта
	obj = document.getElementById('comment');
	// создаем обект если не существует
	if (!obj)
	{
		obj = document.createElement('input');
		obj.type = 'hidden';
		obj.id = 'comment';
		obj.name = 'comment';
		obj.value = '';
		form_hd = document.getElementById('fields');
		form_hd.appendChild(obj);
	}
	// запрашиваем данные
	var comment = prompt('Изменить комментарий', obj.value);
	obj.value = comment;
	fill_data();
}
function fill_data() {
	obj = document.getElementById('input');
	data_out = document.getElementById('data');
	var val = (obj) ? obj.value : 'объект не найден, тут ошибка';
	data_out.innerHTML = 'Комментарий: ' + val;
}
</SCRIPT>


<a href="#" onClick="add_com();">add comment</a> 
<span id="data"></span>
<span id="fields"></span>

__________________
Всегда есть решение.


Помещено RaZEr 28-08-2005 в 20:43:

quote:
RaZEr никаких ошибок нет
Как сказать ... ты создаёшь объет с id=comment:

obj.id = 'comment';

а потом выбираешь по id=input:

obj = document.getElementById('input');

__________________
The time was broken ...


Помещено polo 28-08-2005 в 20:54:

Ты прав, это ошибка. Чтож у меня на странице не работает? Пойду разбираться.

polo добавил 28-08-2005 в 21:43:23:
Тьфу ты блин, всему виной была функция которая осуществляла получение объекта. Некорректно работала с созданными объектами. Тему можно считать закрытой.

__________________
Всегда есть решение.


Формат времени GMT. Текущее время 14:31.
Показаны 11 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.