473,788 Members | 2,800 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

CSS Navigation Menu - horizontal and keep submenu opened

22 New Member
I have this code used for the navigation on an HTML page. It's an accordion style dropdown menu. Everything works fine I just need to change it so that the submenuheader class allows it to be a clickable link. Right now all that happens with for example Home has two submenus of About Us and Quality. When you click home it expands the dropdown. But I want it to expand and also direct to a Home page. thanks in advance!


Expand|Select|Wrap|Line Numbers
  1. var ddaccordion={
  2.  
  3.     contentclassname:{}, //object to store corresponding contentclass name based on headerclass
  4.  
  5.     expandone:function(headerclass, selected){ //PUBLIC function to expand a particular header
  6.         this.toggleone(headerclass, selected, "expand")
  7.     },
  8.  
  9.     collapseone:function(headerclass, selected){ //PUBLIC function to collapse a particular header
  10.         this.toggleone(headerclass, selected, "collapse")
  11.     },
  12.  
  13.     expandall:function(headerclass){ //PUBLIC function to expand all headers based on their shared CSS classname
  14.         var $=jQuery
  15.         var $headers=$('.'+headerclass)
  16.         $('.'+this.contentclassname[headerclass]+':hidden').each(function(){
  17.             $headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion")
  18.         })
  19.     },
  20.  
  21.     collapseall:function(headerclass){ //PUBLIC function to collapse all headers based on their shared CSS classname
  22.         var $=jQuery
  23.         var $headers=$('.'+headerclass)
  24.         $('.'+this.contentclassname[headerclass]+':visible').each(function(){
  25.             $headers.eq(parseInt($(this).attr('contentindex'))).trigger("evt_accordion")
  26.         })
  27.     },
  28.  
  29.     toggleone:function(headerclass, selected, optstate){ //PUBLIC function to expand/ collapse a particular header
  30.         var $=jQuery
  31.         var $targetHeader=$('.'+headerclass).eq(selected)
  32.         var $subcontent=$('.'+this.contentclassname[headerclass]).eq(selected)
  33.         if (typeof optstate=="undefined" || optstate=="expand" && $subcontent.is(":hidden") || optstate=="collapse" && $subcontent.is(":visible"))
  34.             $targetHeader.trigger("evt_accordion")
  35.     },
  36.  
  37.     expandit:function($targetHeader, $targetContent, config, useractivated){
  38.         $targetContent.slideDown(config.animatespeed, function(){config.onopenclose($targetHeader.get(0), parseInt($targetHeader.attr('headerindex')), $targetContent.css('display'), useractivated)})
  39.         this.transformHeader($targetHeader, config, "expand")
  40.     },
  41.  
  42.     collapseit:function($targetHeader, $targetContent, config, isuseractivated){
  43.         $targetContent.slideUp(config.animatespeed, function(){config.onopenclose($targetHeader.get(0), parseInt($targetHeader.attr('headerindex')), $targetContent.css('display'), isuseractivated)})
  44.         this.transformHeader($targetHeader, config, "collapse")
  45.     },
  46.  
  47.     transformHeader:function($targetHeader, config, state){
  48.         $targetHeader.addClass((state=="expand")? config.cssclass.expand : config.cssclass.collapse) //alternate btw "expand" and "collapse" CSS classes
  49.         .removeClass((state=="expand")? config.cssclass.collapse : config.cssclass.expand)
  50.         if (config.htmlsetting.location=='src'){ //Change header image (assuming header is an image)?
  51.             $targetHeader=($targetHeader.is("img"))? $targetHeader : $targetHeader.find('img').eq(0) //Set target to either header itself, or first image within header
  52.             $targetHeader.attr('src', (state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse) //change header image
  53.         }
  54.         else if (config.htmlsetting.location=="prefix") //if change "prefix" HTML, locate dynamically added ".accordprefix" span tag and change it
  55.             $targetHeader.find('.accordprefix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse)
  56.         else if (config.htmlsetting.location=="suffix")
  57.             $targetHeader.find('.accordsuffix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse)
  58.     },
  59.  
  60.     urlparamselect:function(headerclass){
  61.         var result=window.location.search.match(new RegExp(headerclass+"=((\\d+)(,(\\d+))*)", "i")) //check for "?headerclass=2,3,4" in URL
  62.         if (result!=null)
  63.             result=RegExp.$1.split(',')
  64.         return result //returns null, [index], or [index1,index2,etc], where index are the desired selected header indices
  65.     },
  66.  
  67.     getCookie:function(Name){ 
  68.         var re=new RegExp(Name+"=[^;]+", "i") //construct RE to search for target name/value pair
  69.         if (document.cookie.match(re)) //if cookie found
  70.             return document.cookie.match(re)[0].split("=")[1] //return its value
  71.         return null
  72.     },
  73.  
  74.     setCookie:function(name, value){
  75.         document.cookie = name + "=" + value + "; path=/"
  76.     },
  77.  
  78.     init:function(config){
  79.     document.write('<style type="text/css">\n')
  80.     document.write('.'+config.contentclass+'{display: none}\n') //generate CSS to hide contents
  81.     document.write('<\/style>')
  82.     jQuery(document).ready(function($){
  83.         ddaccordion.urlparamselect(config.headerclass)
  84.         var persistedheaders=ddaccordion.getCookie(config.headerclass)
  85.         ddaccordion.contentclassname[config.headerclass]=config.contentclass //remember contentclass name based on headerclass
  86.         config.cssclass={collapse: config.toggleclass[0], expand: config.toggleclass[1]} //store expand and contract CSS classes as object properties
  87.         config.revealtype=/^(click)|(mouseover)$/i.test(config.revealtype)? config.revealtype.replace(/mouseover/i, "mouseenter") : "click"
  88.         config.htmlsetting={location: config.togglehtml[0], collapse: config.togglehtml[1], expand: config.togglehtml[2]} //store HTML settings as object properties
  89.         config.oninit=(typeof config.oninit=="undefined")? function(){} : config.oninit //attach custom "oninit" event handler
  90.         config.onopenclose=(typeof config.onopenclose=="undefined")? function(){} : config.onopenclose //attach custom "onopenclose" event handler
  91.         var lastexpanded={} //object to hold reference to last expanded header and content (jquery objects)
  92.         var expandedindices=ddaccordion.urlparamselect(config.headerclass) || ((config.persiststate && persistedheaders!=null)? persistedheaders : config.defaultexpanded)
  93.         if (typeof expandedindices=='string') //test for string value (exception is config.defaultexpanded, which is an array)
  94.             expandedindices=expandedindices.replace(/c/ig, '').split(',') //transform string value to an array (ie: "c1,c2,c3" becomes [1,2,3]
  95.         var $subcontents=$('.'+config["contentclass"])
  96.         if (expandedindices.length==1 && expandedindices[0]=="-1") //check for expandedindices value of [-1], indicating persistence is on and no content expanded
  97.             expandedindices=[]
  98.         if (config["collapseprev"] && expandedindices.length>1) //only allow one content open?
  99.             expandedindices=[expandedindices.pop()] //return last array element as an array (for sake of jQuery.inArray())
  100.         if (config["onemustopen"] && expandedindices.length==0) //if at least one content should be open at all times and none are, open 1st header
  101.             expandedindices=[0]
  102.         $('.'+config["headerclass"]).each(function(index){ //loop through all headers
  103.             if (/(prefix)|(suffix)/i.test(config.htmlsetting.location) && $(this).html()!=""){ //add a SPAN element to header depending on user setting and if header is a container tag
  104.                 $('<span class="accordprefix"></span>').prependTo(this)
  105.                 $('<span class="accordsuffix"></span>').appendTo(this)
  106.             }
  107.             $(this).attr('headerindex', index+'h') //store position of this header relative to its peers
  108.             $subcontents.eq(index).attr('contentindex', index+'c') //store position of this content relative to its peers
  109.             var $subcontent=$subcontents.eq(index)
  110.             var needle=(typeof expandedindices[0]=="number")? index : index+'' //check for data type within expandedindices array- index should match that type
  111.             if (jQuery.inArray(needle, expandedindices)!=-1){ //check for headers that should be expanded automatically (convert index to string first)
  112.                 if (config.animatedefault==false)
  113.                     $subcontent.show()
  114.                 ddaccordion.expandit($(this), $subcontent, config, false) //Last Boolean value sets 'isuseractivated' parameter
  115.                 lastexpanded={$header:$(this), $content:$subcontent}
  116.             }  //end check
  117.             else{
  118.                 $subcontent.hide()
  119.                 config.onopenclose($(this).get(0), parseInt($(this).attr('headerindex')), $subcontent.css('display'), false) //Last Boolean value sets 'isuseractivated' parameter
  120.                 ddaccordion.transformHeader($(this), config, "collapse")
  121.             }
  122.         })
  123.         $('.'+config["headerclass"]).bind("evt_accordion", function(){ //assign custom event handler that expands/ contacts a header
  124.                 var $subcontent=$subcontents.eq(parseInt($(this).attr('headerindex'))) //get subcontent that should be expanded/collapsed
  125.                 if ($subcontent.css('display')=="none"){
  126.                     ddaccordion.expandit($(this), $subcontent, config, true) //Last Boolean value sets 'isuseractivated' parameter
  127.                     if (config["collapseprev"] && lastexpanded.$header && $(this).get(0)!=lastexpanded.$header.get(0)){ //collapse previous content?
  128.                         ddaccordion.collapseit(lastexpanded.$header, lastexpanded.$content, config, true) //Last Boolean value sets 'isuseractivated' parameter
  129.                     }
  130.                     lastexpanded={$header:$(this), $content:$subcontent}
  131.                 }
  132.                 else{
  133.                     ddaccordion.collapseit($(this), $subcontent, config, true) //Last Boolean value sets 'isuseractivated' parameter
  134.                 }
  135.          })
  136.         $('.'+config["headerclass"]).bind(config.revealtype, function(){
  137.             if (config.revealtype=="mouseenter"){
  138.                 ddaccordion.expandone(config["headerclass"], parseInt($(this).attr("headerindex")))
  139.             }
  140.             else{
  141.                 $(this).trigger("evt_accordion")
  142.                 return false //cancel default click behavior
  143.             }
  144.         })
  145.         config.oninit($('.'+config["headerclass"]).get(), expandedindices)
  146.         $(window).bind('unload', function(){ //clean up and persist on page unload
  147.             $('.'+config["headerclass"]).unbind()
  148.             var expandedindices=[]
  149.             $('.'+config["contentclass"]+":visible").each(function(index){ //get indices of expanded headers
  150.                 expandedindices.push($(this).attr('contentindex'))
  151.             })
  152.             if (config.persiststate==true){ //persist state?
  153.                 expandedindices=(expandedindices.length==0)? '-1c' : expandedindices //No contents expanded, indicate that with dummy '-1c' value?
  154.                 ddaccordion.setCookie(config.headerclass, expandedindices)
  155.             }
  156.         })
  157.     })
  158.     }
  159. }
Dec 1 '08
17 13590
Nyris
22 New Member
No no! This is what the navigation looks like now. What I need it to do is when you click on the header menu's I want it to go to that page as well as open up the submenus. I haven't changed anything yet. ^_^b
Dec 19 '08 #11
Dormilich
8,658 Recognized Expert Moderator Expert
in the CSS dropdown the submenu will open if the mouse pointer touches the appropriate link (the last link had a working sample, as I recall). so boldly speaking CSS dropdown doesn't depend on click events.

by speaking of opening the submenus—where do you want the submenus to show up (there's a whole lot of possibilities, only limited by you imagination)?
Dec 19 '08 #12
Nyris
22 New Member
I would like to expand beneath the header like it does now. That's what the boss wants! haha
Dec 19 '08 #13
Dormilich
8,658 Recognized Expert Moderator Expert
should be possible, you have to play around with the CSS a bit, though.
Dec 19 '08 #14
acoder
16,027 Recognized Expert Moderator MVP
Nyris, are you going the CSS route or are you sticking to JavaScript? If you're changing to CSS, I'll move this thread over to the HTML/CSS forum.
Dec 19 '08 #15
Nyris
22 New Member
I want to try it with CSS, yes. Though I'll probably need some help with it. I know absolutely nothing about Javascript. Trying to edit the file now to get it to do what I want is less likely to happen haha.
Dec 22 '08 #16
acoder
16,027 Recognized Expert Moderator MVP
Moved thread to the HTML/CSS forum and edited the title to reflect the change in direction.

Moderator.
Dec 22 '08 #17
drhowarddrfine
7,435 Recognized Expert Expert
The only way to have the submenu open is if you send the html that way. CSS will not do this automatically.
Dec 23 '08 #18

Sign in to post your reply or Sign up for a free account.

Similar topics

1
2967
by: Maria Gonzalez | last post by:
Hello, I would like to know if it is possible to create a Navigational Menu that has all the Major Categories on top row, then when a mouse is over it, the bottom row appears with sublinks but not like a list vertically. I want it to show up horizontally across that bottom row and still keep the top Category highlighted. Does anyone know where I can find a script for something like this? Is it possible to do with javascript?
8
7836
by: Posting2002 | last post by:
Hi, I am trying to create the following: http://www.ece.uwaterloo.ca/~dbusuioc/site/menu_submenu.htm So far it's in Javascript and when you're going over the top buttons in the menu, it creates a different sub-menu for each of them. This sub-menu is just a single image the way I've created it.... What I'm trying to do is now link various parts of the sub-menu to various page links or actions.
14
1938
by: Bryan | last post by:
I am attempting to make a web page more Netscape friendly... <a href="http:www.gordonceilings.com"></a> I have already corrected the table issues in an offline staging site (where I do the building and then move it to the live site when ready), so don't worry about those. My problem lies in the menu on the left. It shows up and the initial links work in Netscape 8, but the menu will not drop down to show the sub-selections. I can get the...
2
9331
by: Sergio E. | last post by:
Hi group, I write this post with the following question: How can I to build an absolutely horizontal menu?, This is because I can't find how can I configure the menu component of asp.net 2.0 in vs2005. I need somthing like this: the root menu in this form
1
2866
by: Nospam | last post by:
I am trying to have an expandable menu each time it's clicked expands, and if it's clicked again, if it is already expanded contracts, and if contracted expands, following this example http://www.dynamicdrive.com/dynamicindex1/navigate1.htm, I notice the example works in each sub folder and folder, it contracts and expands if it is already contracted/expanded, what do I add to this: <a...
6
2339
by: adz1809 | last post by:
I have created this horizontal dropdown menu in css which is working fine in IE6+ but isn't firefox, and I have no idea why. here is the code: HTML: <body id="our-travels" class="home"> <div id="header"> <h1>Header</h1>
1
1591
by: Dave | last post by:
Hello, I'm working on a new site and i'd like to have a navigation menu on it. Ideally i'm thinking: home first item second item etc obviously with different names. I could use echo to output each line, but i
3
1609
by: RobertTheProgrammer | last post by:
Hi all, I'm having a perplexing problem with my menu control using asp.net. Basically, I want a menu control that behaves similar to a Windows menu. For example: File - New - Open - Save - Exit
0
9656
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9967
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
8993
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7517
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6750
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5398
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
4069
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3670
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2894
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.