Кто-нибудь получает поля выбора нулевой высоты в Firefox 3.6.3? - PullRequest
2 голосов
/ 26 мая 2010

Если вы откроете этот HTML-код в Firefox 3.6.3 (что также подтверждено в некоторых более ранних версиях) и повторно нажмете ссылку drawStuff (), он не будет последовательно отображать содержимое последнего элемента div. Если присмотреться поближе, кажется, что он отображает выбранные поля с высотой = 0. Есть идеи, почему это произойдет?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title> A Page </title>
    <script type="text/javascript">
      var num_select_options = 800;

      function drawStuff() {
        for (var i = 0; i <= 1; i++) {
          var foobar = document.getElementById('elem_' + i);
          while (foobar.childNodes.length >= 1) {
            foobar.removeChild(foobar.firstChild);
          }
          for (var j = 0; j < 4; j++){
            var elem_select = document.createElement('select');
            for (var k = 0; k < num_select_options; k++) {
              elem_select.appendChild(new Option("Blah", k));
            }
            foobar.appendChild(elem_select);
          }          
        }
      }
    </script>    
  </head>

  <body>
    <table border=1 style="width:900px;" summary="A Table">
      <tr>
        <td> <div id="elem_0"></div> </td>
        <td> <div>abc</div>  <div id="elem_1"></div> </td>
      </tr>
    </table>

    <a href="javascript:drawStuff()"> drawStuff() </a>

    <script type="text/javascript">
      drawStuff();
    </script>

  </body>  
</html>

Ответы [ 3 ]

1 голос
/ 26 мая 2010

Я могу воспроизвести это. Тем не менее, я не вижу ничего особенно плохого в вашем коде.

Просто предположение ... Вы вводите большое количество необработанного HTML на свою страницу. Возможно, браузер не может справиться с этим при определенных обстоятельствах. Я думаю, вы могли бы попробовать другой подход: использовать методы DOM, а не innerHTML. Что-то вроде:

var select = document.createElement("select");
select.options.push( new Option("Blah", i) );
document.getElementById("elem_" + i).appendChild(select);

По моему опыту, браузеры иногда предпочитают это.

Обновление

Еще одна вещь, которую вы можете попробовать: сохранить весь необработанный HTML-код в переменной и сразу выполнить внедрение. Возможно, вы сможете избежать проблем, связанных с асинхронным выполнением функций DOM: -?

1 голос
/ 26 мая 2010

Работает как надо для меня.

Единственная странная вещь, которую я вижу в коде, это то, что вы закрываете символ "/" в закрывающих тегах, который не нужен.

0 голосов
/ 26 мая 2010

Изучите макет, используя Firebug . Высота действительно 0? Если это так, используйте другие панели, чтобы выяснить, откуда они берутся. Может быть, таблица стилей пользователя?

[EDIT] Где находится элемент form?

Также вы помещаете встроенный элемент (select) рядом с элементом блока (div с abc). Попробуйте создать select в div.

Если это тоже не сработает, попробуйте установить размер select с помощью CSS. Затем сообщите о найденной ошибке в Firefox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...