Быть может, быстро: проблемы с побегом (я думаю) в вызове .innerHTML - PullRequest
1 голос
/ 20 февраля 2009

Настройка:

У меня есть меню suckerdiv со ссылками, которые вызывают функцию. Упомянутая функция выглядит так:

function F(string)
{
    var s = '';
    var c = '';
    var t = '';
    if(string == 'cat')
    {
        s = "cat";
        c = "animal";
        t = "fluffy";
    }
   // ...
    document.getElementById("title").innerHTML = t;
    document.getElementByID("category").innerHTML = c;
    document.getElementByID("description").innerHTML = s;
}

отлично работает. однако в реальной реализации переменная description содержит немного HTML, и кажется, что это отбрасывает IE. Firefox прекрасно с этим справляется, но если у меня есть, скажем,

c = 'Stuff<br><ul><li>listed stuff</li><li>more listed stuff</li><li>some more listed stuff</li></ul><br>bla bla<br>bla';

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

три идентификатора выше - это div, которые вложены в таблицу следующим образом:

<table border=1>
<tr><td><div id="title"></div></td></tr>
<tr><td><div id="category"></div></td></tr>
<tr><td><div id="description"></div></td></tr>
</table>

Я знаю, что таблицы в IE доступны только для чтения, но я также знаю, что TD не доступны. заголовок и категория работают нормально, поэтому я решил, что это как-то связано с html в этой строке. Есть ли какая-то часть этого, что я должен сбежать? Я попытался заполнить его html-escape-кодами вроде

Есть идеи?

Ответы [ 3 ]

1 голос
/ 20 февраля 2009

Doh!

Извините, что потратили ваше время, ребята - оказывается, это было совершенно не связано. Линия ломалась из-за идентификатора div; поскольку HTML-код в середине страницы, вложенный в содержащий div, сгенерированный системой управления контентом, очевидно, где-то еще был другой div на странице. Изменение "div id = description" на "div id = dynDescription" решило эту проблему.

Спасибо за ответы, хотя! Определенно ценится.

1 голос
/ 20 февраля 2009

Все, что я могу догадаться, это то, что вы можете попытаться самостоятельно закрыть теги BR: <br />

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

0 голосов
/ 20 февраля 2009

Я создал следующий контрольный пример:

<html><head></head><body>
<script type="text/javascript">
function F(str) {
  var s = '';
  var c = '';
  var t = '';
  if (str == 'cat') {
    s = "cat";
    // c = "animal";
    c = 'Stuff<br><ul><li>listed stuff</li><li>more listed stuff</li><li>some more listed stuff</li></ul><br>bla bla<br>bla';
    t = "fluffy";
  }
  // ...
  document.getElementById("title").innerHTML = t;
  document.getElementById("category").innerHTML = c;
  document.getElementById("description").innerHTML = s;
}
</script>
<table border="1">
<tr><td><div id="title"></div></td></tr>
<tr><td><div id="category"></div></td></tr>
<tr><td><div id="description"></div></td></tr>
</table>
<form><input type="button" onclick="F('cat');"></form>
</body></html>

Кажется, что он работает правильно в Internet Explorer 7. Вы уверены, что в // ... вы не делаете что-то, что вызывает вашу ошибку? Подтвердили ли вы, что это происходит с каждой копией Internet Explorer 7 (в вашей копии может быть надстройка, поврежденный или устаревший компонент или неправильная запись в реестре, приводящая к появившейся ошибке). Вы сузили проблему до назначения строки для innerHTML, используя простой и лаконичный пример кода, подобный показанному выше?

...