jQuery addclass并删除类没有正确更新

时间:2012-03-11 18:29:53

标签: jquery asp.net sharepoint-2010

我在MasterPage中有一个SharePoint ASPMenu,我正在尝试使用jQuery更改所选的样式类。基本上,当用户单击菜单项时,它将导致回发,以便将页面定向到单击的菜单URL。当用户点击菜单项时,我将URL放入cookie中。然后当页面加载时我将为所选菜单设置样式。这是我到目前为止的代码

$(document).ready(function () { 
LinkClicked();  
FireMe();   
});
function FireMe()
{
    var val = $.cookie('sabValue');

    if(val !== null)
    {   
        $(".s4-tn a").each(function(){          
            $(this).removeClass("selected").closest("li").removeClass("selected"); 
        });
        $(".s4-tn a[href='"+val+"']").addClass("selected").closest("li").addClass("selected");          
    }      
}

function LinkClicked(){
    $(".s4-tn a").click(function() {
        var sabValue = $(this).attr("href");
        $.cookie('sabValue',sabValue );
    });         
}

我的问题是,在页面加载后(用户点击菜单后),不会发生更改。我必须再次单击该菜单项,以便应用所选样式。

这是ASPMenu声明

<SharePoint:AspMenu
  ID="TopNavigationMenuV4"
  Runat="server"
  EnableViewState="false"
  DataSourceID="topSiteMap"
  AccessKey="<%$Resources:wss,navigation_accesskey%>"
  UseSimpleRendering="true"
  UseSeparateCss="false"
  Orientation="Horizontal"
  StaticDisplayLevels="2"
  MaximumDynamicDisplayLevels="2"
  SkipLinkText=""
  CssClass="s4-tn"/>

为什么会这样。 感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:1)

您是否尝试过从LinkClicked内部调用FireMe()? :

function LinkClicked(){
    $(".s4-tn a").click(function() {
        var sabValue = $(this).attr("href");
        $.cookie('sabValue',sabValue );

        FireMe(); //you could pass a value here, too
    });         
}

答案 1 :(得分:1)

点击处理程序中没有任何内容可以更改类。你的fireMe(0已经在页面加载时被触发了。你可以在处理程序中调用Fireme()但是更有效率只是将类添加到“this”

function LinkClicked(){
    $(".s4-tn a").click(function() {
        var sabValue = $(this).attr("href");
        $.cookie('sabValue',sabValue );
        $(".s4-tn a.selected").removeClass("selected");
        $(this).addClass('selected');
    });         
}