Отладка IE8 Javascript Заменить внутреннюю ошибку времени выполнения - PullRequest
17 голосов
/ 17 февраля 2009
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

Ответы [ 10 ]

15 голосов
/ 17 февраля 2009

Вы не можете установить значение для innerHTML таблицы, вы должны получить доступ к дочерним ячейкам или строкам и изменить их следующим образом:

document.getElementById(tabid).rows[0].cells.innerHTML = 'blah blah';

Для получения дополнительной информации / пример: Table, TableHeader, TableRow, TableData Objects

14 голосов
/ 03 ноября 2010

В 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 диапазона.

8 голосов
/ 09 февраля 2011

Я обнаружил, что в IE8 некоторые элементы доступны для чтения: 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.

3 голосов
/ 09 декабря 2010

У меня была та же проблема, но моя ошибка была в том, что я вставлял тег p прямо под элементом p, как в:

document.getElementById('p-element').innerHTML = '<p>some description</p>';

Я действительно не вижу, как это ошибка формата HTML; больше похоже на еще одну ошибку IE8.

2 голосов
/ 24 ноября 2010

Отлично, у меня была такая же ситуация с настройкой innerHTML. Когда я прочитал это, я понял, что один из элементов был TR, а другой - TD, и TD работал.

Изменение кода таким образом, чтобы они оба TD s исправляли его, что означает, что это довольно неочевидная проблема, вызванная структурой таблиц.

Предположительно, он выбрасывает DOM, когда я начинаю изменять строки таблицы, поскольку он больше не может хранить таблицу как массив.

Я уверен, что IE мог бы дать более информативное сообщение об ошибке, поскольку DOM не может так уж редко меняться на лету, и кажется странным, что это приведет к ошибке только для таблиц.

1 голос
/ 07 января 2011

О, да - помните, что структура HTML должна быть действительной.

Я попытался загрузить всю страницу в тег <p> - не удалось (очевидно), изменение ее на тег <div> решило мою проблему!

Запомните структуру HTML!

0 голосов
/ 01 июля 2013

Если вам нужно установить innerHTML на "" (пустая строка), тогда вы можете использовать removeChild вместо

0 голосов
/ 09 февраля 2012

При использовании YUI попробуйте использовать

Y.one('#'+data.id).setContent(html); 

вместо:

Y.one('#'+data.id).set('innerHTML' , html);
0 голосов
/ 12 февраля 2011

почему это произошло в IE ...

сценарий:

Неизвестная Javascript ошибка времени выполнения в IE при доступе к Div внутри Div для добавления содержимого ajax.

Решение:

никогда не помещайте вложенные div между тегами формы для воспроизведения с их содержимым ..:)

0 голосов
/ 22 июня 2009

Это не большая проблема, так как я столкнулся с той же проблемой несколько дней назад и причиной этой ошибки происходит в том, что: - существует ошибка в нашем HTML-формате, или вы используете элемент, отличный от <td>, для замены innerHTML, т.е. используйте только, не используйте таблицы, div для замены innerHTML.

  • SwapnilK
...