Как совместить click mouseover mouseout

302
17 августа 2017, 22:23

Есть меню, в меню несколько пунктов, как сделать так чтобы при клике на какой-то из них, background менял цвет(допустим. серый), и оставался серым до тех пор, пока не нажали другой пункт меню. Но кроме этого нужен еще hover или mouseover/out (подскажите, что лучше). Так вот, чтобы при нажатом каком-то пункте mouseout не убирал цвет я использовал unbind. Дальше возникла проблема в том, что при нажатом пункте меню, при наведении на другие пункты меню они тоже закрашиваются, то цвет и вовсе убирается. Я в общем перепробовал тысячу раз и каждый раз какие-то косяки, запутался уже.. К тому же, хотел сделать так, чтобы при обновлении странички или переходе на какой то пункт меню он оставался подсвеченным, это я реализовал с помощью localStorage, вроде работает, но тоже не очень. Буду премного благодарен за любую помощь) Я нуб в js поэтому сильно не бейте

$(document).ready(function ()
{
    $("ul > li a").click(function ()
    {
        $("ul > li a").css({"background": "white"});
        $(this).css({"background": "#ccc"});
        $(this).unbind("mouseout");
    })
    .mouseover(function ()
    {
        $(this).css({"background": "#ccc"});
    })
    .mouseout(function ()
    {
        $(this).css({"background": "white"});
    });
});
Answer 1

Для подстветки активного (нажатого) пункта меню намного проще использовать дополнительный класс, например, .active, и описывать стили для него непосредственно в css. С ховером тоже самое - пишите все стили в css, тогда не придется вешать лишние обработчики в js.

$('ul li a').on('click', function() { 
  var list = $(this).closest('ul'); 
  list.find('li a').removeClass('active'); 
  $(this).addClass('active'); 
});
ul li a.active, 
ul li a:hover { 
  background: #ccc; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<ul> 
  <li><a>Пункт 1</a></li> 
  <li><a>Пункт 2</a></li> 
  <li><a>Пункт 3</a></li> 
  <li><a>Пункт 4</a></li> 
  <li><a>Пункт 5</a></li> 
</ul>

READ ALSO
Несколько номеров в строке

Несколько номеров в строке

Есть такой плагин Masked Input Plugin

218
inputMask hh:mm:ss alias

inputMask hh:mm:ss alias

Здравствуйте! Подключаю inputMask с алиасом hh:mm:ss если ввел к примеру 12:10:20, ставлю курсор на часы и удаляю символы - очищается только ячейка часовА...

227
Замена ключа в массиве

Замена ключа в массиве

Имеется JS массив вида

249
Как создать свой div для каждого элемента?

Как создать свой div для каждого элемента?

Нужно посчитать количествоromb и для каждого создать отдельный div

212