Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Добавление элемента и работа с ним (https://javascript.ru/forum/events/1367-dobavlenie-ehlementa-i-rabota-s-nim.html)

nvbn 02.07.2008 17:28

Добавление элемента и работа с ним
 
Написал функцию:
function d_c(d,n_id,el) {
	var alien;
	var attr;
	attr = document.createAttribute("id");
	attr.value=n_id;
	var enemy = document.getElementById(d); 
	alien = document.createElement( el );
	alien.setAttribute( attr );
	enemy.appendChild( alien );
}

В опере и фф работает прекрасно, но в ие нет, когда берётся getElementById , то пишет, что заданного элемента не существует(
Как сделать, что бы это работало в ие?

nvbn 06.07.2008 14:33

Плз, пмогите

Андрей Параничев 06.07.2008 14:52

Странно, а функция точно вызывается тогда, когда элемент уже получен в браузер?

nvbn 06.07.2008 17:02

Содержание ещё не получено, обязательно сразу создавать с содержанием?

Андрей Параничев 06.07.2008 17:23

Да, эта функция должна вызываться тогда, когда элемент с соответствующим id уже находится в модели DOM. Например при событии window.onload или document.body.onload. Ну или сразу после этого элемента в тегах <script>.

nvbn 06.07.2008 18:54

Не, элемент, в который это добавляется уже загружен, через такую функцию добавляется туда элемент, в который другая функция вставит содержимое

Андрей Параничев 06.07.2008 20:00

Если ошибка действительно в том, что getElementById() не может найти элемент, значит этого элемента нету. Посмотрите, может не работает та функция, которая создает этот элемент (если такая есть)? В общем, тут сложно сказать... Выложите больше листингов вашего кода, может сможем разобраться.

nvbn 07.07.2008 06:46

Вложений: 1
В фф и опере работает всё нормально.
function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

function x_r(lnk,id) {
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', lnk, true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
     if(xmlhttp.status == 200) {
    	 document.getElementById(id).innerHTML  = xmlhttp.responseText;
         }
  }
};
xmlhttp.send(null);
}

function d_c(d,n_id,el) {
	var alien;
	var attr;
	attr = document.createAttribute("id");
	attr.value=n_id;
	var enemy = document.getElementById(d); 
	alien = document.createElement( el );
	alien.setAttribute( attr );
	enemy.appendChild( alien );
}


И это вызывается
d_c('t_1','f_1','span');
x_r('own.php?id=1','f_1');

Самое главное, что firebug'у всё нравится

На другой машине поставил ie 8b1 (там есть js дебагер), и он мне выдал ошибку:
http://javascript.ru/forum/attachmen...1&d=1215411866
И указал на строчку:
document.getElementById(id).innerHTML  = xmlhttp.responseText;

Я как понял, он хочет работать с элементом, который ещё не создался, как это можно избежать??

Сделал такую фишку:
function d_c(d,n_id,el) {
	var alien; alert('1');
	var attr; alert('2');
	attr = document.createAttribute("id"); alert('3');
	attr.value=n_id; alert('4');
	var enemy = document.getElementById(d); alert('5');
	alien = document.createElement(el); alert('6');
	alien.setAttribute( attr ); alert('7');
	enemy.appendChild( alien ); alert('8');
}

И вот, в фф и опере алертами доходит до 6-ти (включительно) , но скрипт выполняется правильно, но дом инспектор не видит появившийся элемент, что странно. В ие доходить как и нужно до 8-ми, но скрипт не работает.

Всё, заработало)))))), код:
function d_c(d,n_id,el) {
	var enemy = document.getElementById(d); 
	var bax = document.createElement(el);
	bax.setAttribute('id', n_id);
	enemy.appendChild(bax); 
}

Но писать приходится не innerHTML, а
document.getElementById(id).appendChild( document.createTextNode(xmlhttp.responseText)) ;

Как можно сделать, чтоб так выводилось нормально, а не хтмл кодом?

Phoenix 07.07.2008 14:19

Цитата:

Сообщение от nvbn (Сообщение 3426)
Написал функцию:
В опере и фф работает прекрасно, но в ие нет, когда берётся getElementById , то пишет, что заданного элемента не существует(
Как сделать, что бы это работало в ие?

Хоть и поздно, но если не ошибаюсь при создании элементов IE требует обязательное поле 'name'. Хотя могу и ошибаться :)

nvbn 07.07.2008 14:39

innerHTML заработал


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