style.display, не работающий в Firefox, Opera, Safari - IE7 OK

Я имею абсолютно расположенный div то, что я хочу показать, когда пользователь нажимает на ссылку. onclick из ссылки вызывает js функцию, которая устанавливает дисплей отделения для блокирования (также попробованный: "", inline, table-cell, inline-table, и т.д.). Это работает отлично в IE7, нисколько в любом браузере, который я попробовал (FF2, FF3, Opera 9.5, Safari).

Я попытался добавить предупреждения прежде и после вызова, и они показывают, что дисплей изменился от none кому: block но div не отображается.

Я могу добраться div отображаться в FF3, если я изменяю значение дисплея с помощью инспектора HTML Firebug (но не под управлением JavaScript через консоль Firebug) - таким образом, я знаю, что это не просто обнаруживается вне экрана и т.д.

Я попробовал все, включая что я могу думать:

  • Используя другой doctype (XHTML 1, HTML 4, и т.д.)
  • Используя видимость, видимую/скрытую вместо блока/ни одного дисплея
  • Используя встроенный JavaScript вместо вызова функции
  • Тестирование от различных машин

Какие-либо идеи о том, что могло вызвать это?

10
задан Rahul 16 October 2019 в 07:30
поделиться

5 ответов

Начиная с установки свойств с JavaScript никогда, казалось, не работал, но установка Firebug использования осматривают, сделал, я начал подозревать, что идентификационный селектор JavaScript был поврежден - возможно, было несколько объектов в DOM с тем же идентификатором? Источник не показал, что было, но цикличное выполнение через все отделения, использующие JavaScript, я нашел, что это имело место. Вот функция, которую я закончил тем, что использовал для показа всплывающего окна:

function openPopup(popupID)
{
  var divs = getObjectsByTagAndClass('div','popupDiv');
  if (divs != undefined && divs != null)
  {
    for (var i = 0; i < divs.length; i++)
    {
      if (divs[i].id == popupID)
        divs[i].style.display = 'block';        
    }
  }
}

(служебная функция getObjectsByTagAndClass не перечисленный)

Идеально я узнаю, почему тот же объект вставляется многократно, но я не управляю платформой рендеринга, просто ее исходные данные.

Таким образом, при отладке проблем как это, не забудьте проверять на дублирующиеся идентификаторы в DOM, который может повредить getElementById.

Всем, кто ответил, спасибо за Вашу справку!

7
ответ дан 3 December 2019 в 16:55
поделиться

Проверьте ошибочную консоль (Меню Инструментов> Ошибочная Консоль в Firefox 3), чтобы удостовериться, что нет другой ошибки, происходящей это, Вы не видите, который мешает Вашему сценарию работать.

1
ответ дан 3 December 2019 в 16:55
поделиться

Можно ли обеспечить некоторую разметку, которые воспроизводят ошибку? Ваша ситуация должна иметь некоторое отношение к Вашему коду, так как я могу заставить это работать над IE, FF3 и Opera 9.5:

function show() {
  var d = document.getElementById('testdiv');
  d.style.display = 'block';
}
#testdiv {
  position: absolute;
  height: 20px;
  width: 20px; 
  display: none;
  background-color: red;
}
<div id="testdiv"></div>
<a href="javascript:show();">Click me</a>
7
ответ дан 3 December 2019 в 16:55
поделиться

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

1
ответ дан 3 December 2019 в 16:55
поделиться

Нашел ответ: Мне нужно использовать следующее, чтобы он работал в обоих браузерах:

document.getElementById('editRow').style.display = '';
5
ответ дан 3 December 2019 в 16:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: