Первоначальный стиль вашего div'а 'xx' может вызывать некоторые проблемы ...
Объяснение
Допустим, у вас есть правило таблицы стилей, настроенное так, чтобы ваши div
были изначально скрыты.Что-то вроде:
div { display: none }
(... где, конечно, селектор (div
), вероятно, будет немного менее широким)
Это будет работать правильно, в этомстраница загрузится со всеми вашими div
скрытыми элементами («свернутыми»).Однако в самих элементах нет фактического значения для свойства style.display - они просто наследуют значение из таблицы стилей.Таким образом, в вашем коде тест, который вы используете, чтобы проверить, скрыт ли элемент:
if(e.style.display=="none"){
... завершится неудачно, неправильно идентифицируя цель как видимую и вызывая свойство style.display
быть установленным в "none" (который не имеет видимого эффекта, так как элемент уже был скрыт таблицей стилей).Затем следующий раз, когда кнопка будет нажата, значение, которое вы установили в последний раз, приведет к успешному выполнению текста, и ваша подпрограмма установит style.display
в «block».
легкий способ исправить это - просто повернуть тест и проверить наличие "блока":
if(e.style.display=="block"){
e.style.display="none"
} else {
e.style.display="block"
}
... однако, это развалится, если некоторые элементы настроены набыть изначально видимым: вы просто столкнетесь с той же проблемой в обратном порядке, при первом нажатии кнопки не будет никакого видимого эффекта.Для более надежного поведения вам нужно проверить стиль, который на самом деле активен для элемента:
function getStyle(el, name)
{
// the way of the DOM
if ( document.defaultView && document.defaultView.getComputedStyle )
{
var style = document.defaultView.getComputedStyle(el, null);
if ( style )
return style[name];
}
// IE-specific
else if ( el.currentStyle )
return el.currentStyle[name];
return null;
}
function toggleDiv(a){
var e=document.getElementById(a);
if(!e)return true;
if(getStyle(e, "display") == "none"){
e.style.display="block"
} else {
e.style.display="none"
}
return true;
}
Здесь мы используем вспомогательную функцию getStyle()
для извлечения активного значения в перекрестномПлатформенная манера.Смотри также: getComputedStyle()
, currentStyle