jQuery addclass и удалить класс не обновляется должным образом - PullRequest
0 голосов
/ 11 марта 2012

У меня есть SharePoint ASPMenu в MasterPage, я пытаюсь изменить выбранный класс стилей с помощью jQuery.В основном, когда пользователь щелкает пункт меню, он вызывает обратную передачу, так что страница будет перенаправлена ​​на URL-адрес меню, по которому щелкнули.Когда пользователь щелкает по пункту меню, я помещаю URL в куки.Затем, когда страница загрузится, я установлю стиль для выбранного меню.Вот мой код до сих пор

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

Почему это происходит.Ценю любую помощь.Спасибо

Ответы [ 3 ]

2 голосов
/ 02 августа 2012

Я столкнулся с этой же проблемой, пытаясь собрать меню. Это код, который я в конечном итоге использовал. Мне нужно было указать путь к 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>
1 голос
/ 11 марта 2012

В вашем обработчике кликов нет ничего, что могло бы изменить класс.Ваш 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');
    });         
}
1 голос
/ 11 марта 2012

Вы пытались вызвать FireMe () из LinkClicked? :

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

        FireMe(); //you could pass a value here, too
    });         
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...