2010-12-11 3 views
0

Я по умолчанию создал страницу, где element1.style.display='none'. Теперь у меня есть еще один элемент: element2, который при нажатии отображается element1. Но при попытке установить element1 на функцию, которая устанавливает element1.style.display="block", это дает мне ошибку, так как element1 имеет значение NULL. Я понимаю, это потому, что по умолчанию display=none.Несущий элемент javascript с дисплеем: нет

Как я могу решить эту проблему? это использование javascript, а не jquery.

var hash = location.hash; 
alert(hash); 

function init() { 
    if(hash == '#menu-a' || hash == '') { 
     document.getElementById('menu-a').style.display = 'block'; 
    } 
    else if(hash == '#menu-b') { 
     document.getElementById('menu-b').style.display = 'block'; 
    } 
    else { 
     document.getElementById('menu-c').style.display = 'block'; 
    } 
} 

window.onload=init; 
+1

Ваша проблема не связана с 'style.display', но для того, чтобы помочь вам, вы должны разместить соответствующую часть своего кода. –

+0

Я люблю человеко-речевой код. Мне нравится реальный код лучше. Не могли бы вы предоставить образец кода? –

+0

Можете ли вы разместить свой код? Ошибка заключается не в том, что для стиля отображения установлено значение none. Элемент не будет считаться нулевым из-за атрибута стиля. Там что-то происходит. – charliegriefer

ответ

0

Если скрытый элемент всегда находится в том же порядке, вы могли бы попробовать к нему доступ с getElementsByTagName («») [arrayindex].

+0

Имея ссылку на элемент, должен быть достаточно и достаточно. Скорее всего, это проблема с областью, и элемент 'element1' не отображается, откуда он хочет получить к ней доступ. Но без кода действительно ничего нельзя сказать об этом (лучшим решением было бы дать элементу идентификатор и использовать 'getElementById'). –

+0

tl; dr версия: getElementById в правильном envoirenment - лучшее решение. Ты прав. Полный комментарий: Я предполагал, что код не предусмотрен, что все элементы исправлены правильно, и getElementById все еще не работает. Хотя getElementById, конечно, является лучшим решением, я просто хотел бы предложить некоторое быстрое решение, чтобы попытаться решить эту проблему косметически, чтобы можно было работать с меньшим давлением. – Cadoc

+0

Вот код var hash = location.hash; предупреждение (хэш); Функция init() { if (hash == '# menu-a' || hash == '') { document.getElementById ('menu-a'). Style.display = 'block'; } else if (hash == '# menu-b') { document.getElementById ('menu-b'). Style.display = 'block'; } else { document.getElementById ('menu-c'). Style.display = 'block'; } } window.onload = init; –

0

Есть вероятность, что javascript будет запущен до того, как дом будет готов? element1 существует в дереве дома в тот момент, когда вы хотите получить к нему доступ?

+0

Должен быть комментарий imo. –

1

Я понимаю, что это потому, что дисплей = нет по умолчанию

Нет, это потому, что ничего не было присвоено переменной.

Я предполагаю, что вы ожидаете элемент с id="element1", чтобы автоматически создать переменную JavaScript с именем element1 - это не должно.

document.getElementById('element1').style.display = 'block'; 
0

Вы должны сделать display:block вскоре, когда element инициализируется, а затем вернуть его в display:none сразу после инициализации.

0

У меня была аналогичная проблема: не все браузеры обрабатывают Элементы с помощью display:none (или, по крайней мере, их детей) таким же образом. У меня есть некоторые объекты SVG, помещенные в два DIV, и я хочу показать один или другой. Во время инициализации я делаю некоторые манипуляции с SVG Elements (изменение некоторых элементов текста внутри SVG). Это отлично работало с Firefox, но не с Opera, Chrome и IE. В этих браузерах Элементы, находящиеся внутри div с display:none, дали нулевой результат при попытке получить их с помощью document.getElementById(myID). Первым решением было установить свойство display:none только после инициализации (это сработало), но когда я захотел показать их снова, вся инициализация была потеряна (текстовые метки были по умолчанию). Я думаю, это доказывает, что содержание DIV с display:none как-то очищено от DOM, а не просто скрыто. Я попытался использовать visibility:hidden вместо display:none, но это создало большой беспорядок с макетом страницы. Единственное решение, которое, кажется, работает на всех браузерах (до сих пор), чтобы поместить DIV я хочу, чтобы скрыть в «космическом пространстве», как it is suggested here...

position: absolute; 
top: -9999px; 
left: -9999px; 
0

Я полагаю, что вы меняете стиль этого элемента до того даже этот элемент создается на вашей странице html. Когда вы пытаетесь получить доступ к некоторому элементу на веб-странице, если этот элемент недоступен на странице в этот момент времени, он возвращает Null . Мое предложение - запустить эту часть javascript после того, как эти элементы будут загружены полностью, используя такие атрибуты, как, onclick, onload, etc ...

Смежные вопросы