Help with 2 level tab menu


B

Bigalo

Hello,
I'm stuck and would like some help. I have a horizontal tab structure
with subtabs. Right now the main tabs are activated onclick and they
show their respective subtabs. I would like to add the same
functionality to the subtabs so that when they are clicked, the style
changes and the clicked subtab shows as active. I would also like to
have the cookies applied to the subtabs and subtab contents as well.
Can anyone please help?


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<title>Untitled Document</title>
<style type="text/css">
body{
font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;
margin-top:0px;

}
..bodyText{
padding-left:10px;
padding-right:10px;
border-top:1px solid #000000;
}
..bodyText p{
margin-top:5px;
}
#mainContainer{
width:760px;
height:600px;
border:1px solid #000000;
margin:0 auto;
background-image:url('../../images/heading3.gif');
background-repeat:no-repeat;
padding-top:85px;
}
#mainMenu{
background-color: #FFF;/* Background color of main menu */
font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;/*
Fonts of main menu items */
font-size:0.9em;/* Font size of main menu items */
border-bottom:1px solid #000000;/* Bottom border of main menu */
height:30px;/* Height of main menu */

position:relative;/* Don't change this position attribute */

}
#mainMenu a{
padding-left:5px;/* Spaces at the left of main menu items */
padding-right:5px;/* Spaces at the right of main menu items */
font-weight:bold;
/* Don't change these two options */
position:absolute;
bottom:-1px;/* Change this value to -2px if you're not using a strict
doctype */
}
#submenu{
font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;/*
Font of sub menu items */
background-color:#E2EBED;/* Background color of sub menu items */

width:100%;/* Don't change this option */

}
#submenu div{
white-space:nowrap;/* Don't change this option */

}
/*
Style attributes of active menu item
*/
#mainMenu .activeMenuItem{
/* Border options */
border-left:1px solid #000000;
border-top:1px solid #000000;
border-right:1px solid #000000;
background-color: #E2EBED;/* Background color */

cursor:pointer;
}

#mainMenu .activeMenuItem img{
position:absolute;
bottom:0px;
right:0px;
}

#mainMenu .inactiveMenuItem{
color: #000;
cursor:pointer;
}

#submenu a{
text-decoration:none;
padding-left:5px;
padding-right:5px;
color: #000;
font-size:0.9em;
}

#submenu a:hover{
color: #FF0000;/* Red color when the user moves the mouse over sub
menu items */
}

</style>
<script type="text/javascript">

var menuAlignment = 'left';// Align menu to the left or right?
var topMenuSpacer = 0; // Horizontal space(pixels) between the main
menu items
var activateSubOnClick = false; // if true-> Show sub menu items on
click, if false, show submenu items onmouseover
var leftAlignSubItems = false; // left align sub items t

var activeMenuItem = false;// Don't change this option. It should
initially be false
var activeTabIndex = 0;// Index of initial active tab(0 = first tab) -
If the value below is set to true, it will override this one.
var rememberActiveTabByCookie = true;// Set it to true if you want to
be able to save active tab as cookie

var MSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false;
var Opera = navigator.userAgent.indexOf('Opera')>=0?true:false;
var navigatorVersion = navigator.appVersion.replace(/.*?MSIE ([0-9]\.
[0-9]).*/g,'$1')/1;

function Get_Cookie(name) {
var start = document.cookie.indexOf(name+"=");
var len = start+name.length+1;
if ((!start) && (name != document.cookie.substring(0,name.length)))
return null;
if (start == -1) return null;
var end = document.cookie.indexOf(";",len);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(len,end));
}
// This function has been slightly modified
function Set_Cookie(name,value,expires,path,domain,secure) {
expires = expires * 60*60*24*1000;
var today = new Date();
var expires_date = new Date( today.getTime() + (expires) );
var cookieString = name + "=" +escape(value) +
( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
( (path) ? ";path=" + path : "") +
( (domain) ? ";domain=" + domain : "") +
( (secure) ? ";secure" : "");
document.cookie = cookieString;
}

function showHide()
{
if(activeMenuItem){
activeMenuItem.className = 'inactiveMenuItem';
var theId = activeMenuItem.id.replace(/[^0-9]/g,'');
document.getElementById('submenu_'+theId).style.di splay='none';
var img = activeMenuItem.getElementsByTagName('IMG');
if(img.length>0)img[0].style.display='none';
}

var img = this.getElementsByTagName('IMG');
if(img.length>0)img[0].style.display='inline';

activeMenuItem = this;
this.className = 'activeMenuItem';
var theId = this.id.replace(/[^0-9]/g,'');
document.getElementById('submenu_'+theId).style.di splay='block';

if(rememberActiveTabByCookie){
Set_Cookie('dhtmlgoodies_tab_menu_tabIndex','index : ' + (theId-1),
100);
}
}

function initMenu()
{
var mainMenuObj = document.getElementById('mainMenu');
var menuItems = mainMenuObj.getElementsByTagName('A');
if(document.all){
mainMenuObj.style.visibility = 'hidden';
document.getElementById('submenu').style.visibilit y='hidden';
}
if(rememberActiveTabByCookie){
var cookieValue = Get_Cookie('dhtmlgoodies_tab_menu_tabIndex') + '';
cookieValue = cookieValue.replace(/[^0-9]/g,'');
if(cookieValue.length>0 && cookieValue<menuItems.length){
activeTabIndex = cookieValue/1;
}
}

var currentLeftPos = 15;
for(var no=0;no<menuItems.length;no++){
if(activateSubOnClick)menuItems[no].onclick = showHide; else
menuItems[no].onmouseover = showHide;
menuItems[no].id = 'mainMenuItem' + (no+1);
if(menuAlignment=='left')
menuItems[no].style.left = currentLeftPos + 'px';
else
menuItems[no].style.right = currentLeftPos + 'px';
currentLeftPos = currentLeftPos + menuItems[no].offsetWidth +
topMenuSpacer;

var img = menuItems[no].getElementsByTagName('IMG');
if(img.length>0){
img[0].style.display='none';
if(MSIE && !Opera && navigatorVersion<7){
img[0].style.bottom = '-1px';
img[0].style.right = '-1px';
}
}

if(no==activeTabIndex){
menuItems[no].className='activeMenuItem';
activeMenuItem = menuItems[no];
var img = activeMenuItem.getElementsByTagName('IMG');
if(img.length>0)img[0].style.display='inline';

}else menuItems[no].className='inactiveMenuItem';
if(!document.all)menuItems[no].style.bottom = '-1px';
if(MSIE && navigatorVersion < 6)menuItems[no].style.bottom = '-2px';

}

var mainMenuLinks = mainMenuObj.getElementsByTagName('A');

var subCounter = 1;
var parentWidth = mainMenuObj.offsetWidth;
while(document.getElementById('submenu_' + subCounter)){

var subItem = document.getElementById('submenu_' + subCounter);

if(leftAlignSubItems){
// No action
}else{
var leftPos = mainMenuLinks[subCounter-1].offsetLeft;
document.getElementById('submenu_'+subCounter).sty le.paddingLeft =
leftPos + 'px';
subItem.style.position ='absolute';
if(subItem.offsetWidth > parentWidth){
leftPos = leftPos - Math.max(0,subItem.offsetWidth-parentWidth);
}
subItem.style.paddingLeft = leftPos + 'px';
subItem.style.position ='static';

}
if(subCounter==(activeTabIndex+1)){
subItem.style.display='block';
}else{
subItem.style.display='none';
}

subCounter++;
}
if(document.all){
mainMenuObj.style.visibility = 'visible';
document.getElementById('submenu').style.visibilit y='visible';
}
document.getElementById('submenu').style.display=' block';
}
window.onload = initMenu;
</script>
</head>
<body>
<!-- This is the start of the menu -->
<div id="mainMenu">
<a>Products</a> <a>Support</a> <a>About us</a> <a>Download</a>
</div>
<div id="submenu">
<!-- The first sub menu -->
<div id="submenu_1">
<a href="javascript:void(0);">Product 1</a> <a
href="javascript:void(0);">Product 2</a> <a
href="javascript:void(0);">Product 3</a>
</div>
<!-- Second sub menu -->
<div id="submenu_2">
<a href="javascript:void(0);">Phone</a> <a
href="javascript:void(0);">Email</a> <a
href="javascript:void(0);">Knowledge base</a>
</div>
<!-- Third sub menu -->
<div id="submenu_3">
<a href="javascript:void(0);">History</a> <a
href="javascript:void(0);">The team</a> <a
href="javascript:void(0);">Contact us</a> <a
href="javascript:void(0);">Visions</a>
</div>
<!-- Fourth sub menu -->
<div id="submenu_4">
<a href="javascript:void(0);">Patches</a> <a
href="javascript:void(0);">Whitepapers</a> <a
href="javascript:void(0);">Tab menu</a> <a
href="javascript:void(0);">Color picker</a> <a
href="javascript:void(0);">Window scripts</a> <a
href="javascript:void(0);">Games</a>
</div>
</div>
</body>
</html>
 
Ad

Advertisements

S

SAM

Bigalo a écrit :
Hello,
I'm stuck and would like some help. I have a horizontal tab structure
with subtabs.

What a job !
Right now the main tabs are activated onclick and they
show their respective subtabs. I would like to add the same

?? seems to work with onmouseover, non ?
functionality to the subtabs so that when they are clicked, the style
changes and the clicked subtab shows as active. I would also like to

that is made : sub-menu becomes red when clicked

If we click one of the menus a new page would have to be loaded, this
new page will have same menu,
perhaps with a particular css to show the menu as you want ?

have the cookies applied to the subtabs and subtab contents as well.

why that for ?
to get the menu as it was on previous page ?
Can anyone please help?

Ideas of menus structure other than yours :
<http://www.cssplay.co.uk/menus/drop_fly.html>
<http://www.cssplay.co.uk/menus/dd_valid.html>
<http://www.cssplay.co.uk/menus/dd_valid_2.html>

Perhaps they will be easier to fix by your cookie(s)


(the OP's code : see his previous post)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top