@triowinner

Как правильно прописать событие hover, чтобы не конфликтовали классы?

Здравствуйте.
Заранее извиняюсь, знаю что вопрос для "чайников", просто я только недавно стал изучать скрипты.

Допустим у меня есть одинаковые ссылки, на которые я повесил событие hover и спрятал блок через метод .hide. Когда я навожу на ссылку, то метод .show показывает все блоки одновременно, а мне нужно, чтобы срабатывало поочередно т.е. я навел на ссылку и событие .show показало только один блок.

Пример кода
$(function() {
$('a').hover(function() {
  $('.block').show();
 },
 function() {
  $('.block').hide();
 });
});
  • Вопрос задан
  • 278 просмотров
Решения вопроса 1
@triowinner Автор вопроса
Спасибо, я уже сам разобрался, с помощью добавления аттребут.
Если кому интересно.

<a data=".bloсk1">Наведи 1</a>
<a data=".bloсk2">Наведи 2</a>
<a data=".bloсk3">Наведи 3</a>

<div class="block1">1</div>
<div class="block2">2</div>
<div class="block3">3</div>


$('a').hover(function() {
  var hoverLink = $(this).attr('data');
    if ( $(hoverLink).is(':hidden') ) {
      $(hoverLink).show(0);
    } else {
      $(hoverLink).hide(0);
    }
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
politon
@politon
HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
Можно без скриптов, на голом css сделать.
Ответ написан
@MadridianFox
Web-программист, многостаночник
Внутри обработчика событий можно ссылать непосредственно на элемент, который это событие произвёл через $(this). Вроде как-то этот элемент ещё можно достать из объекта события, но я постоянно забываю как)
$(function() {
$('a').hover(function() {
  $(this).show();
 },
 function() {
  $(this).hide();
 });
});
Ответ написан
mrusklon
@mrusklon
Не получается? Яростно гугли!
а я все же на css бы сделал
a:hover .block{
    display: block;
}
Ответ написан
Комментировать
Krasnodar_etc
@Krasnodar_etc
avito front
А вы понимаете, почему так происходит? Классы не конфликтуют, это логичное поведение, селектор .block относится к нескольким элементам, соответственоо $('.block') - массив этих элементов.

Много способов есть. Зависит от разметки. Универсальный - поставить data-атрибуты. Менее универсальный - работать с $(this)

Раз вы только учитесь, вам дают правильные советы, а не готовые решения. Учить jQuery не зная JS - зло. Это бессмысленно.
Кстати, достаточно забить этот вопрос в поиске по тостеру (или в гугле) - будет миллион ответов с решениями.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы