2012-03-11 35 views
0

我有一個MasterPage中的SharePoint ASPMenu,我嘗試使用jQuery更改選定的樣式類。基本上,當用戶點擊一個菜單項時,它會導致回發,這樣頁面將被定向到點擊菜單的url。當用戶點擊一個菜單項時,我把這個URL放在cookie中。然後,當頁面加載時,我將設置所選菜單的樣式。這裏是我到目前爲止的代碼jQuery addclass和刪除類沒有正確更新

$(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"/> 

這究竟是爲什麼。 欣賞任何幫助。 謝謝

+0

請將您生成的HTML和JS代碼發佈到jsfiddle.net。 ()。s4-tn a「)。each(function()...並不是最好的方法,你可以直接寫$('。selected',$('。s4-tn ')).removeClass('selected'); – 2012-03-11 18:35:28

回答

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 
    });   
} 
+0

謝謝你試圖回答,當用戶點擊一個菜單時,用戶將被引導到被點擊的頁面,所以當這個頁面加載時,我想將選擇的類別分配給點擊的菜單項。如果我在這裏分配選擇的類,它將會丟失,這就是爲什麼我使用cookie來保存點擊的href值,以便稍後可以找到它並指定所選的類。是否有其他想法。謝謝 – 2012-03-12 07:47:37

+0

你仍然可以設置cookie,但事件需要觸發功能,我相信。 – orolo 2012-03-12 11:52:46

1

在您的點擊處理程序中沒有任何東西可以改變類。你fireMe(0已經被髮射在頁面加載時,你可以調用Fireme()內的處理程序,但更高效的只是要添加的類別爲「本」

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

感謝您嘗試回答,當用戶點擊菜單時,用戶將被引導到被點擊的頁面。因此,當該頁面加載時,我想分配所選課程將被點擊菜單項目,如果我在這裏分配所選課程,它將會丟失爲什麼我使用cookie來保存點擊的href值,以便稍後可以找到它並分配選定的類。你有什麼其他的想法。謝謝 – 2012-03-12 07:04:58

+0

你可以記錄值到控制檯,這樣你就可以比較第一次加載和第二次點擊並尋找差異 – charlietfl 2012-03-12 12:42:03

2

我遇到了同樣的問題試圖整理一個菜單,這是我最終使用的代碼,我必須提供一個cookie的路徑,這樣它就可以通過每個頁面來使用,我也必須每次都刪除cookie,因爲我仍然在我的一個cookie上獲取重複的cookie菜單項。

$(document).ready(function() { 
    $("#menu li").click(function() { 
     $.cookie('selectedPage', null); 
     var selectedPage = $(this).attr("id"); 
     $.cookie('selectedPage', selectedPage, { path: '/' }); 

     RemoveClass(); 
    }); 

    AddClass(); 
}); 

function RemoveClass() { 
    $("#menu li").each(function() { 
     $(this).removeClass("selected"); 
    }); 
} 

function AddClass() { 
    var selectedPage = $.cookie('selectedPage'); 

    if (selectedPage !== null) { 
     $("#menu li[id='" + selectedPage + "']").addClass("selected"); 
    } 
} 

我的菜單看起來像這樣...

<ul id="menu"> 
    <li id="mm-one"><a href="#">Item One</a></li> 
    <li id="mm-two"><a href="#">Item Two</a></li> 
    <li id="mm-three"><a href="#">Item Three</a></li> 
    <li id="mm-four"><a href="#">Item Four</a></li> 
</ul>