Ли меню нуждается в классе "выбранных" - PullRequest
0 голосов
/ 29 июля 2011

когда пользователь нажимает на вкладку меню, я хочу, чтобы она оставалась выделенной с помощью белой кнопки.

вот моя попытка, но она не работает. Если вы нажмете кнопку «Домой», она не останется белой.

HTML

<ul id="navigation">
    <li><a href="#"><span>HOME</span></a></li>
    <li><a href="/en-us/about.aspx"><span>ABOUT</span></a></li>
    <li><a href="/en-us/contact.aspx"><span>CONTACT</span></a></li>
</ul>

CSS:

body{
    background-color:orange;
}

#navigation a
{
    background: url("http://i52.tinypic.com/spxfdw.png") no-repeat scroll 0 0 transparent;
    color: #000000;
    height: 43px;
    list-style: none outside none;
    padding-left: 10px;
    text-align: center;
    text-decoration: none;
    width: 116px;
}

#navigation a span
{
    padding-right: 10px;
    padding-top: 15px;
}

#navigation a, #navigation a span
{
    display: block;
    float: left;

}

/* Hide from IE5-Mac \*/
#navigation a, #navigation a span
{
    float: none
}
/* End hide */

#navigation a:hover
{

    background: url('http://i51.tinypic.com/2iih9c9.png') no-repeat scroll 0 0 transparent;
    color: #000000;
    height: 43px;
    list-style: none outside none;
    padding-left: 10px;
    text-decoration: none;
    width: 116px;
    text-align:center
}

#navigation a:hover span
{
    background: url(right-tab-hover.gif) right top no-repeat;
    padding-right: 10px
}

#navigation ul
{
    list-style: none;
    padding: 0;
    margin: 0
}

#navigation li
{
    float: left;
    list-style: none outside none;
    margin: 0;
} 

JS

$('#navigation li').click(function() {
    $('#navigation li').addClass('selected');
});

есть идеи?

Ответы [ 7 ]

10 голосов
/ 29 июля 2011

Я вижу несколько модификаций здесь.

Во-первых, когда вы применяете выбранный класс, вы применяете ко всем li элементам, что неверно. Вы хотите применить класс только к нажатому элементу списка.

во-вторых, когда вы щелкаете по другому элементу списка, вы хотите удалить выбранный класс.

поэтому измененный код будет:

$('#navigation li').click(function() {
    $('#navigation li').removeClass('selected');
    $(this).addClass('selected');
});

Самое главное, у вас нет класса selected. Я поместил временное определение выбранного класса следующим образом:

.selected{
border: 1px solid #888;
background-color: #white;

}

Вы можете увидеть рабочий пример здесь: на JsFiddle

дополнительно , ваш элемент a имеет серый фон. так что вы можете захотеть применить выбранный класс белого фона к вашему элементу также .. что-то вроде:

$('a', this).addClass('selected'); //apply to  anchor element also

и когда вы убираете класс, выполняйте ту же сделку.

Итак, вы хотите сохранить состояния кнопок на разных страницах. Javascript действителен только до тех пор, пока страница открыта. Как только пользователь переходит на новую страницу, весь javascript будет сброшен. Чтобы преодолеть это, вы можете сделать одно из двух:

1) Если вы используете главную страницу для меню, добавьте атрибут runat="server" к своим элементам списка, а из кода позади добавьте выбранный класс к соответствующему элементу списка со своей дочерней страницы (возможно, у вас может быть публичная функция на главной странице)

    //Master page
    public SetHomeMenu()
    {
        liHome.Attributes.Add("class","selected");
    }

    //in Child page
    Master.SetHomeMenu(); 

2) Если вы хотите сделать это в javascript, вам нужно прочитать ваш URL, разобрать его, а затем добавить selected класс к соответствующему li

//put this javascript in your head section or even at the bottom, just before closing
// body tag </body>

    $(document).ready(function () {
        if(window.location.href.indexOf("home"))
        {
             $("#navigation li#home").addClass("selected");
        }
        else if(window.location.href.indexOf("about"))
        {
             $("#navigation li#about").addClass("selected");
        }
        else if(window.location.href.indexOf("contact"))
        {
             $("#navigation li#contact").addClass("selected");
        } 

    });

Но чтобы это работало, вам нужно добавить атрибуты id в элементы списка, например:

<ul id="navigation">
    <li id="home"><a href="#"><span>HOME</span></a></li>
    <li id="about"><a href="/en-us/about.aspx"><span>ABOUT</span></a></li>
    <li id="contact"><a href="/en-us/contact.aspx"><span>CONTACT</span></a></li>
</ul>

Для использования последнего решения вам нужно изменить оператор if на этот пример:

if (window.location.href.indexOf ("home")> -1)

1 голос
/ 29 июля 2011

Как уже говорили другие, у вас нет класса .selected, и ваши js установят все элементы li в выбранные, когда вы нажмете один, вы можете захотеть изменить его на это во второй строке

$('#navigation  li').click(function() {
   $(this).addClass('selected');
});
1 голос
/ 29 июля 2011

Это сделало бы это. Вы забыли установить выбранный класс css

http://fiddle.jshell.net/54uDQ/

Важная часть - это CSS

#navigation a:hover, #navigation a.selected
{

    background: url('http://i51.tinypic.com/2iih9c9.png') no-repeat scroll 0 0 transparent;
    color: #000000;
    height: 43px;
    list-style: none outside none;
    padding-left: 10px;
    text-decoration: none;
    width: 116px;
    text-align:center
}
0 голосов
/ 29 июля 2011
  1. У вас нет css для '.selected'.Итак, добавьте стиль, чтобы кнопка стала белой.

  2. Ваш jQuery неверен.В функции щелчка наведите указатель на «this», поскольку он нацелен на конкретный элемент, на который вы нажали.

    $('#navigation li').click(function(event) {
       $(this).addClass('selected');
    });
    
0 голосов
/ 29 июля 2011

Насколько я могу судить по вашему CSS, вы не определили стили для класса selected.

Назначение этого класса вашему лицу недостаточно. Вам также нужно стилизовать класс так, как вы хотите.

.selected{
 background-color:#fff;
}

(и т.д.)

0 голосов
/ 29 июля 2011

Вы даже не установили класс для 'selected' в своем CSS.

Добавьте это, и оно должно работать.

#navigation li .selected {
   [CSS to make white background here.]
}
0 голосов
/ 29 июля 2011
#navigation li.a.seletected a.seletected 
{
    background: white; // or background Image or whatever it is your doing to make this      white.
}
...