Стиль отображения не работает в Firefox, Opera, Safari - (IE7 в порядке)

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

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

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

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

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

Любые идеи о том, что может вызвать это?

13.08.2008 20:59:54
9 ОТВЕТОВ

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

1
13.08.2008 21:05:23

Можете ли вы предоставить некоторую разметку, которая воспроизводит ошибку?

Ваша ситуация должна быть как-то связана с вашим кодом, так как я могу заставить его работать на 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
26.02.2020 14:00:46
У меня была эта проблема, но я использовал трюк IE, состоящий в том, чтобы просто вызывать элемент по его идентификатору без предварительного его поиска:testDiv.style.display = 'block';
chama 13.08.2012 15:58:46

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

1
13.08.2008 23:36:09
РЕШЕНИЕ

Так как установка свойств с помощью javascript, похоже, никогда не работала, но установка с использованием проверки Firebug сделала, я начал подозревать, что селектор идентификатора javascript был сломан - возможно, в DOM было несколько элементов с одинаковым идентификатором? Источник не показал, что были, но просматривая все div с использованием 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
14.08.2008 15:23:10
Таким образом, если вы имеете в виду, что у вас было несколько имен идентификаторов на одной странице, это недопустимо, поскольку имена идентификаторов могут появляться на странице только один раз и должны быть уникальными для одного элемента.
Rob 21.11.2009 21:15:55

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

document.getElementById('editRow').style.display = '';
5
15.03.2012 02:16:23
Это сработало для меня с аналогичной проблемой, когда Safari не установил блокировку дисплея: мое исправление должно было быть выполнено, document.getElementById('editRow').style.display = '';после чего document.getElementById('editRow').style.display = 'block';- протестировано на IE11, Chrome, последняя версия Safari от августа 2016 года
Josh Greifer 31.08.2016 11:58:00

Существует раздражающая ошибка отображения в Firefox 3.5, но не в IE7 или Firefox 2.0.9

У меня есть абсолютная позиция 3 DIV - первая с простым текстом; второе с CSS-меню (тип sucklefish с UL и LI) и третье то же самое. Третий не будет отображаться вообще, хотя кодирование было проверено и признано идеальным с помощью валидатора HTML W3C.

В качестве временной меры я объединил содержание второго и третьего DIV.

В Mozilla все должно быть плохо, когда IE7 и FF2 отображают нормально, но не FF 3.5

0
21.11.2009 21:10:04
Тогда ваша разметка должна быть хуже, потому что, если ваша разметка работает в IE, а не в FF, проблема заключается в вашей разметке. Но начните свой собственный поток и покажите нам, что у вас есть, чтобы мы могли исправить это для вас.
Rob 21.11.2009 21:17:45

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

Старый DOCTYPE / html spec

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Заменено на

<html>
2
18.04.2011 20:16:57

Вы должны написать window.onloadметод:

window.onload = document.getElementById('testdiv').style.display='inline';

Или вы также можете сделать переменную:

var d = document.getElementById('testdiv');
window.onload = d.style.display = 'inline';
1
15.11.2012 09:34:38

Я дам вам большой совет:

<div style="..." class="..."> ... </div>

Если у вас есть что-то в стиле, то document.style будет работать! Если у вас есть что-то в классе, оно не будет отображаться в document.style, а class = "..." переопределит это!

Подумайте об этом, и это прояснит так много вопросов. Только это маленькое понимание избавит вас от этого ВИРУСА УМА. Хорошего дня. Приветствия, Рон Лентьес, LC CLS.

0
14.06.2013 12:36:45