#javascript #css #html #nav #navigationbar
#javascript #css #HTML #навигационная система #панель навигации
Вопрос:
Я пытаюсь создать две панели навигации (2 тега div). Один отображается по умолчанию (nav_bar), а другой отображается при нажатии на одну из ссылок (в навигационной панели по умолчанию). Я хочу скрыть другую панель навигации (IT_Spend_Nav) по умолчанию. Вот мой код. Другая панель навигации по умолчанию скрыта, но когда я пытаюсь щелкнуть ссылки в другой панели навигации (IT Spend), панель навигации исчезает. Вот часть моего кода. Я хочу, чтобы другая панель навигации отображалась до тех пор, пока пользователь хочет находиться в этом конкретном разделе (IT Spend). Пожалуйста, помогите. Спасибо.
<div id="nav_bar">
<ul>
<li><a href="#none" onclick="showdiv('IT_Spend_Nav');">IT Spend</a></li>
<li><a href="#none" onclick="showdiv('IT_Assessment_Nav');">Assessments</a></li>
<li><a href="#none" onclick="showdiv('IT_Information_Nav');">Information</a></li>
</ul>
</div>
<div id = "IT_Spend_Nav" hidden="true">
<ul>
<li><a href="#none" onclick="showdiv('IT_Spend_2012');">2012</a></li>
<li><a href="#none" onclick="showdiv('IT_Spend_2012');">2013</a></li>
<li><a href="#none" onclick="showdiv('IT_Spend_2012');">2014</a></li>
<li><a href="#none" onclick="showdiv('IT_Spend_2012');">2015</a></li>
<li><a href="#none" onclick="showdiv('IT_Spend_2012');">IT Spend Growth Trend</a> </li>
<li><a href="#none" onclick="showdiv('IT_Spend_2012');">IT OPEX/CAPEX Summary</a></li>
</ul>
</div>
javascript
var _targetdiv = null;
function showdiv(id) {
if(_targetdiv)
_targetdiv.style.display = 'none';
_targetdiv = document.getElementById(id);
_targetdiv.style.display = 'block';
}
Комментарии:
1. можете ли вы с этим поработать ?
2. Похоже
targetDiv.style.display
, всегда установлено значениеblock
. Вы должны установитьtargetDiv
ссылку на элемент с самого начала, затем проверить значениеdisplay
вместоtargetDiv
самого себя.3. спасибо за ответ Музси. Но я не силен в кодировании. Код javascript, который вы видите выше, был скопирован из stackoverflow. Можете ли вы сообщить мне, как это сделать.
4. Я сделал скрипку, используя ваш пример кода — jsfiddle.net/pRNZ3 Кажется, он работает нормально (взгляните), где ваш код JavaScript помещен в HTML-документ?
Ответ №1:
Я обновил вашу скрипку, чтобы меню больше не исчезали
Код JavaScript выглядит следующим образом:
var _menus = [{
id : 'nav_bar',
hidden: false
}, {
id : 'IT_Spend_Nav',
hidden : true
}];
function reset() {
for (var i=0; i< _menus.length; i ) {
var elem = _menus[i],
currDiv = document.getElementById(elem.id);
currDiv.hidden = elem.hidden;
}
}
function showdiv(id, parentId) {
var _targetdiv = document.getElementById(id);
var _parentDiv = document.getElementById(parentId);
// reset to default state
reset();
// show current menu. make sure parent is also visible
if (_parentDiv) {
_parentDiv.hidden = false;
}
if (_targetdiv) {
_targetdiv.hidden = false;
}
}
Я просто сделал так, чтобы все меню возвращались к своим состояниям по умолчанию при нажатии кнопки, после чего мы показываем только соответствующие divs (текущий div и его родительский div, если у вас есть вложенные меню).
В html единственное, что я изменил, это добавить также родительский идентификатор div при вызове функции showdiv при всех нажатиях кнопок (например showdiv('IT_Spend_2012', 'IT_Spend_Nav');
, для первой кнопки)