上次说到当你点击一个菜单,原本是要他背景颜色改变的,但由于每次请求后台,通过转发后
sitemesh的装饰器页面重新加载了,所有的样式又全部回到最初状态 了,所以一直没有效果,
如果想要菜单回显的话我这里有两种解决思路,
1、第一种方法是、当你点击菜单的时候,把你点击菜单的维一标识发送到后台,后台在一个统一的过滤器里面把这个标识得新放入request区域,这样在你转发到的那个页面再去获取这个标识,然后在js里面定义一个处理全局菜单样式的方法,在$(function(){ //... 在这里执行处理全局菜单样式的方法 }),这个维一标识可以是 id 、name、之类的,但我个人用的是当前菜单在他父元素下的坐标,用过jquery的都知道,jquery有一个index()方法,是获取当前元素下标的
2、第二种方法是使用h5的 localStorage来完成,因为现在大部分浏览器都兼容 localStorage所以用它也是一种好的选择
原因跟第一种方法差不多,只是不需要将维一标识发送给后台,而是存放在localStorage当中
说详细点就是当你当点击某一个菜单时,将菜单的维一标识【我用的是index下标】先存放到localStorage当中,然后在页面显示的时候去localStorage当中获取你存入进去的标识,通过该标识用js找到对应的菜单给他加上样式或class,
发一份我的代码吧
$(function () {
//菜单点击后背景变色
var local = window.localStorage;
if(!local){ return layer.alert('当前浏览器版内核太低、建议更换、否则将会影响页面样式。')}
var clickMenu = local.getItem('clickMenu') || 1;
$('.menu li').click(function () {
local.setItem('clickMenu',$(this).index());
}).eq(clickMenu).children().addClass('current').parent().siblings().removeClass('clickMenu');
});
这样就解决了菜单显示问题了