2011-01-14 4 views
0
<ul> 
    <li class="hoverMe"><div class="secret">Haha</div></li> 
    <li class="hoverMe"><div class="secret">Blabla</div></li> 
    <li class="hoverMe"><div class="secret">Tada</div></li> 
</ul> 

Secred дивы скрыты в CSS:JQuery выбора этого ребенка

.secret { 
    display: none; 
} 

Я хочу, чтобы отобразить секретный ребенок «hoverMe» после зависания «hoverMe» (так что, когда пользователь наводит курсор ссылка номер один он видит «Haha», nubmer two «Blabla» и т. Д.).

Я пробовал этот код, и он не работает. Я пытался заменить «next» на «child (ren)» и т. Д., Но Нет. Любые идеи?

jQuery().ready(function() { 

       jQuery('.hoverMe').hover(function(){ 
        jQuery(this).next('.secret').Toggle(); 
       }); 
      }); 

Странная вещь (это) .children() переключает всех детей, но когда я пытаюсь (это) .children ('. Secret'), это ничего не делает.

+0

вы получили свое решение или нет? – Vivek

ответ

0

Если это когда-нибудь случится с вами, и ничто не похоже на работу попробовать добавить еще одного ребенка() в цепи, или по крайней мере, проверьте свою разметку, чтобы убедиться, что ваш родительский элемент не является GRANDparent.

Ответ:

$(this).children().children().show(); 
0
  • Использование children.
  • toggle необходимо начинать с небольшой буквы.
  • Внимание: Вам нужно другое "visible" содержание в элементе списка. В противном случае это займет , а не пробел, и вы ничего не можете навестить. По крайней мере, вам нужно будет добавить &nbsp;. Как вы можете видеть в демо, я добавил их. Если вы удалите его, он больше не будет работать.

Так оно и должно быть:

jQuery('.hoverMe').hover(function(){ 
    jQuery(this).children('.secret').toggle(); 
}); 

Ваш готовый обработчик тоже неправильно, должно быть:

jQuery(document).ready(function() { 
    //... 
}); 

DEMO

+0

Я пробовал этот путь, ничего;/ – anonymous

+0

@anonymous: См. мой обновленный ответ. –

2

hover() может связать два обработчика:

$('.hoverMe').hover(function(){ 
    $(this).children().show(); 
}, function(){ 
    $(this).children().hide(); 
}) 

или

$('.hoverMe').hover(function(){ 
    $(this).find('.secret').show(); 
}, function(){ 
    $(this).find('.secret').hide(); 
}) 

или, как @Felix Kling любезно заметил, он может связывать только одну ручку с:

$('.hoverMe').hover(
    $(this).find('.secret').toggle(); 
) 
+1

Нет, 'hover' принимает также один обработчик. Он будет вызываться при вводе * и * влево, поэтому OPs использовать его с 'toggle' отлично. См. Документацию: http://api.jquery.com/hover/ –

+0

Спасибо. Я сделал исправление, чтобы ответить. – Krule

0
$(function(){ 
    $("ul li.hoverMe").hover(function(){ 
     $(this).children("div.secret").show(); 
    }, 
    function(){ 
     $(this).children("div.secret").hide(); 
    }); 
}); 
0
jQuery().ready(function() { 
       jQuery('.hoverMe').hover(function(){ 
        jQuery(this).children('.secret').**t**oggle(); 
       }); 
      }); 

JS является чувствительным к регистру

+0

А также вы не должны использовать отображение: в этом случае нет никого, потому что на странице, которая будет отвечать за событие hover, не будет занимать места, вы должны использовать видимость: скрывать или каким-то образом указывать размеры прозрачного элемента. – maga

1

Ваши .hoverme s пустые (имеют высоту 0), когда .secret не отображается, поэтому не на что наплевать.

Вы должны будете использовать visibility: hidden/visibility: visible вместо

.secret { 
    visibility:hidden; 
} 

jQuery().ready(function() { 
    $(".hoverMe").hover(function() { 
    $(this).find(".secret").css("visibility", "visible"); 
    }, function() { 
    $(this).find(".secret").css("visibility", "hidden"); 
    }); 
}); 

Пример: http://jsfiddle.net/bM7f2/

Смежные вопросы