Отладка IE8 Javascript Заменить innerHTML Ошибка выполнения
function DeleteData(ID)
{
var ctrlId=ID.id;
var divcontents=document.getElementById(ctrlId).innerHTML;
var tabid=ctrlId.replace(/div/,'tab');
var tabcontents=document.getElementById(tabid).innerHTML;
alert(document.getElementById(tabid).innerHTML);
document.getElementById(tabid).innerHTML="<TBody><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr></TBody>";
document.getElementById(ctrlId).innerHTML='';
}
Я пытаюсь заменить таблицу пустой таблицей, но
document.getElementById(tabid).innerHTML="<TBody><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr></TBody>";
эта строка вызывает Unknown Runtime Error
Ответы
Ответ 1
Вы не можете установить значение в таблицу innerHTML, вы должны получить доступ к дочерним ячейкам или строкам и изменить их следующим образом:
document.getElementById(tabid).rows[0].cells.innerHTML = 'blah blah';
Для получения дополнительной информации/примера: Таблица, TableHeader, TableRow, Объекты TableData
Ответ 2
В IE8 вы не можете изменить innerHTML объекта, когда код, который пытается запустить его из объекта.
Например:
<span id='n1'>
<input type=button value='test' onclick='DoSomething(this);'>
</span>
со следующим кодом, заправленным в какой-то отдаленный угол документа:
<script type='text/javascript'>
function DoSomething(element)
{
document.getElementById("n1").innerHTML = "This is a test"
}
</script>
Это приведет к ошибке с ошибкой неизвестной ошибки выполнения. Я считаю, что это связано с тем, что вы пытаетесь заменить код HTML, который произвел текущую строку исполнения. Событие onclick является частью кода, заменяемого функцией DoSomething. IE8 не нравится.
Я решил проблему, установив событие таймера на 250 миллисекунд, так что функция, вызванная в конце 250 миллисекунд, заменяет диапазон innerHTML.
Ответ 3
Я узнаю, что в IE8 некоторые элементы находятся в readonly: COL, COLGROUP, FRAMESET, HEAD, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.
Поэтому, если вы попытаетесь установить innerHTML для этих элементов, IE8 уведомляет об изменении с Неизвестной ошибкой выполнения.
Подробнее здесь: http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx.
Самый простой способ - преобразовать элементы только для чтения в элемент div.
Ответ 4
У меня была такая же проблема, но моя ошибка состояла в том, что я вставлял тег p
непосредственно под элементом p
, как в:
document.getElementById('p-element').innerHTML = '<p>some description</p>';
Я действительно не вижу, как это ошибка формата HTML; похоже больше на другую ошибку IE8.
Ответ 5
Отлично, у меня была такая же ситуация с настройкой innerHTML
. Когда я прочитал это, я понял, что один из элементов был TR
, а один был TD
, а TD
работал.
Изменение кода так, что оба они TD
исправляют его, что означает, что это довольно неочевидная проблема, вызванная структурой таблиц.
Предположительно, он вызывает ошибку DOM, когда я начинаю изменять таблицы строк, так как он больше не может хранить таблицу как массив.
Я уверен, что IE может дать более информативное сообщение об ошибке, так как не может быть так необычно, что DOM меняется на лету, и кажется странным, что это вызовет ошибку только для таблиц.
Ответ 6
О, да, помните, что структура HTML должна быть действительной.
Я попытался загрузить целую страницу в тег <p>
- он не прошел (очевидно), изменив его на тег <div>
, решил мою проблему!
Так что запомните структуру HTML!
Ответ 7
почему это произошло в IE...
сценарий:
Неизвестная ошибка времени Javascript в IE при доступе к Div внутри Div для добавления содержимого ajax.
решение:
Никогда не помещайте вложенные divs между тегами формы, чтобы играть с ними...:)
Ответ 8
При использовании YUI попытайтесь использовать
Y.one('#'+data.id).setContent(html);
вместо:
Y.one('#'+data.id).set('innerHTML' , html);
Ответ 9
Если вам нужно установить innerHTML в "" (пустая строка), вы можете использовать removeChild вместо
Ответ 10
Это не большая проблема, так как я столкнулся с такой же проблемой несколько дней назад и причина этой ошибки
происходит в том, что есть: существует ошибка в нашем html-формате или вы используете элемент, отличный от <td>
, чтобы заменить innerHTML, то есть использовать только, не использовать таблицы, divs для замены innerHTML.