Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.07.2008, 17:28
Новичок на форуме
Отправить личное сообщение для nvbn Посмотреть профиль Найти все сообщения от nvbn
 
Регистрация: 02.07.2008
Сообщений: 9

Добавление элемента и работа с ним
Написал функцию:
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 , то пишет, что заданного элемента не существует(
Как сделать, что бы это работало в ие?
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2008, 14:33
Новичок на форуме
Отправить личное сообщение для nvbn Посмотреть профиль Найти все сообщения от nvbn
 
Регистрация: 02.07.2008
Сообщений: 9

Плз, пмогите
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2008, 14:52
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Странно, а функция точно вызывается тогда, когда элемент уже получен в браузер?
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2008, 17:02
Новичок на форуме
Отправить личное сообщение для nvbn Посмотреть профиль Найти все сообщения от nvbn
 
Регистрация: 02.07.2008
Сообщений: 9

Содержание ещё не получено, обязательно сразу создавать с содержанием?
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2008, 17:23
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Да, эта функция должна вызываться тогда, когда элемент с соответствующим id уже находится в модели DOM. Например при событии window.onload или document.body.onload. Ну или сразу после этого элемента в тегах <script>.
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2008, 18:54
Новичок на форуме
Отправить личное сообщение для nvbn Посмотреть профиль Найти все сообщения от nvbn
 
Регистрация: 02.07.2008
Сообщений: 9

Не, элемент, в который это добавляется уже загружен, через такую функцию добавляется туда элемент, в который другая функция вставит содержимое
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2008, 20:00
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Если ошибка действительно в том, что getElementById() не может найти элемент, значит этого элемента нету. Посмотрите, может не работает та функция, которая создает этот элемент (если такая есть)? В общем, тут сложно сказать... Выложите больше листингов вашего кода, может сможем разобраться.
Ответить с цитированием
  #8 (permalink)  
Старый 07.07.2008, 06:46
Новичок на форуме
Отправить личное сообщение для nvbn Посмотреть профиль Найти все сообщения от nvbn
 
Регистрация: 02.07.2008
Сообщений: 9

В фф и опере работает всё нормально.
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)) ;

Как можно сделать, чтоб так выводилось нормально, а не хтмл кодом?
Изображения:
Тип файла: jpg e_1.JPG (18.4 Кб, 9 просмотров)

Последний раз редактировалось nvbn, 07.07.2008 в 14:00.
Ответить с цитированием
  #9 (permalink)  
Старый 07.07.2008, 14:19
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Сообщение от nvbn Посмотреть сообщение
Написал функцию:
В опере и фф работает прекрасно, но в ие нет, когда берётся getElementById , то пишет, что заданного элемента не существует(
Как сделать, что бы это работало в ие?
Хоть и поздно, но если не ошибаюсь при создании элементов IE требует обязательное поле 'name'. Хотя могу и ошибаться
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #10 (permalink)  
Старый 07.07.2008, 14:39
Новичок на форуме
Отправить личное сообщение для nvbn Посмотреть профиль Найти все сообщения от nvbn
 
Регистрация: 02.07.2008
Сообщений: 9

innerHTML заработал
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск