View Full Version : Change CSS class when click on menu item
10inja
09-06-2009, 07:56 PM
Hi All,
I took a template from csstemplatesforfree.com
I have a menu in my master page as follows:
<div id="menu">
<ul>
<li id="Inventory" class="active"><a href="Default.aspx" accesskey="1" title="">Inventory</a></li>
<li><a href="#" accesskey="2" title=""></a></li>
<li><a href="#" accesskey="3" title=""></a></li>
<li id="Directions"><a href="Directions.aspx" accesskey="4" title="">Directions</a></li>
<li id="About"><a href="About.aspx" accesskey="5" title="">About</a></li>
<li id="Contact"><a href="Contact.aspx" accesskey="6" title="">Contact</a></li>
</ul>
</div>
My CSS for the active page:
#menu .active a {
height: 37px;
padding-top: 16px;
background-image: url(images/img04.jpg);
color: #327EBE;
}
What do I need to do so that when someone clicks on an item in the menu it changes the class to "active"?
thanks for all the help in advance
wisemx
09-07-2009, 04:40 AM
Hi,
You can find some cool CSS effects that use that method and jquery here:
http://www.webdesignerwall.com/tutorials/maximize-the-use-of-hover/
CrystalCMS
09-07-2009, 10:10 AM
I noticed you are using <A> tags with HREF so the effective operation of this menu is making a new request for the selected web page from the server. This means the question you have asked is not in the DHTML / JavaScript arena but does require some server side code in your master page to get the desired effect.
Try something like the below in your master page (consider it non-production untested code!):
Decorate your <li> tags as runat="server" to make them accessible in code behind:
<div id="menu">
<ul>
<li id="Inventory" class="active" runat="server"><a href="Inventory.aspx" accesskey="1" title="">Inventory</a></li>
<li><a href="#" accesskey="2" title=""></a></li>
<li><a href="#" accesskey="3" title=""></a></li>
<li id="Directions" runat="server"><a href="Directions.aspx" accesskey="4" title="">Directions</a></li>
<li id="About" runat="server"><a href="About.aspx" accesskey="5" title="">About</a></li>
<li id="Contact" runat="server"><a href="Contact.aspx" accesskey="6" title="">Contact</a></li>
</ul>
</div>
Write some codebehind to change the class based on the currently requested page:
using System;
using System.Collections.Generic;
using System.IO;
using System.Web.UI.HtmlControls;
namespace WebApplication1
{
public partial class SiteMaster : System.Web.UI.MasterPage
{
private Dictionary<string, HtmlGenericControl> ctrls = new Dictionary<string, HtmlGenericControl>();
/// <summary>
/// Raises the <see cref="E:System.Web.UI.Control.Init"/> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs"/> object that contains the event data.</param>
protected override void OnInit(EventArgs e)
{
ctrls.Add("Inventory.aspx", Inventory);
ctrls.Add("Directions.aspx", Directions);
ctrls.Add("About.aspx", About);
ctrls.Add("Contact.aspx", Contact);
base.OnInit(e);
}
/// <summary>
/// Handles the Load event of the Page control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void Page_Load(object sender, EventArgs e)
{
setSelectedMenuItemClass();
}
/// <summary>
/// Sets the selected menu item class.
/// </summary>
private void setSelectedMenuItemClass()
{
string requestedFile = Path.GetFileName(Request.Path);
if (!string.IsNullOrEmpty(requestedFile))
{
foreach (KeyValuePair<string, HtmlGenericControl> ctrl in ctrls)
{
HtmlGenericControl aCtrl = ctrl.Value;
aCtrl.Attributes.Remove("class");
}
HtmlGenericControl selectedMenuItem;
if (ctrls.TryGetValue(requestedFile, out selectedMenuItem))
selectedMenuItem.Attributes.Add("class", "active");
}
}
}
}
10inja
09-08-2009, 12:31 AM
Thanks all.
Thanks Joe, I really appreciate this help. It's all working now. I also have a menu at the bottom so I just created another collection ctrls1 and added the ids of the bottom menu and it's working now.
Gotta finish some other stuff and soon will be released.
kamalHWZ
09-30-2009, 08:03 AM
Joe,
This is an awesome post. I applied your code to my MasterPage, it is working like a charm.
Thanks,
Kamal
sus2bhai
10-01-2009, 11:08 AM
Hello all,
I'm in DESPERATE need of this one, searching since a week.
Lastly I found that someone got solution.
Could anybody provide a sample or small working example.
I'm almost crying :mad: since a week
please post it to [email address removed]
thanks
please send it
sangamesh
CrystalCMS
10-01-2009, 12:45 PM
Rather than emailing it I'll post the sample code here just in case anyone else needs it again in future. This is a Visual Studio 2008 solution and project and the language used was C#.
The primary focus of this sample was to demonstrate how to dynamically change an elements' CSS class at runtime. Most of the content in the project is completely arbitrary - the relevant part is the master page code behind code.
Cheers
Joe
sus2bhai
10-01-2009, 11:53 PM
OMG thanks alot...
U saved me..
the thing which i dont understand is, it was the same thing in post, i tried in many ways with no success.
the problem was selectedMenuItem is null reference, which doesnot execute the next line...
Any way thanks once again...
Sangamesh
vBulletin® ©Jelsoft Enterprises Ltd.