Подтвердить что ты не робот

Отладка 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

4b9b3361

Ответ 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.

  • SwapnilK