Добавление элемента и работа с ним
Написал функцию:
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 , то пишет, что заданного элемента не существует( Как сделать, что бы это работало в ие? |
Плз, пмогите
|
Странно, а функция точно вызывается тогда, когда элемент уже получен в браузер?
|
Содержание ещё не получено, обязательно сразу создавать с содержанием?
|
Да, эта функция должна вызываться тогда, когда элемент с соответствующим id уже находится в модели DOM. Например при событии window.onload или document.body.onload. Ну или сразу после этого элемента в тегах <script>.
|
Не, элемент, в который это добавляется уже загружен, через такую функцию добавляется туда элемент, в который другая функция вставит содержимое
|
Если ошибка действительно в том, что getElementById() не может найти элемент, значит этого элемента нету. Посмотрите, может не работает та функция, которая создает этот элемент (если такая есть)? В общем, тут сложно сказать... Выложите больше листингов вашего кода, может сможем разобраться.
|
Вложений: 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)) ; Как можно сделать, чтоб так выводилось нормально, а не хтмл кодом? |
Цитата:
|
innerHTML заработал
|
Часовой пояс GMT +3, время: 21:03. |