div-ы с одинаковым class
Доброго дня. Есть модуль который создает блоки (блоки категорий). Сам блок состоит из картинки категории, имени категории и блока субкатегорий. Нужно что бы блок субкатегорий был скрыт и появлялся только при наведении курсора на картинку категории. Скрываю div выводящий субкатегории - visibility:hidden и использую:
function find_sp() { var f1 = document.getElementById('hp').getElementsByClassNa me('sp') for (var i=0; i<f1.length; i++) f1[i].style.visibility = "visible"; } function hide_sp() { var f1 = document.getElementById('hp').getElementsByClassNa me('sp') for (var i=0; i<f1.length; i++) f1[i].style.visibility= "hidden"; } Использую это для onMouseOver и onMouseOut. Но поскольку div-ы создаются автоматически (сколько категорий - столько div-ов) и у всех них один класс: "sp", то при onMouseOver на любую категорию становятся видимыми субкатегории для всех div-ов (т.е. для всех категорий, а не только для той, для которой было событие onMouseOver) Ребят, подскажите, как реализовать это так, что бы при наведении мыши видимым становлися только блок для одной категории? |
покажи html. нифига не ясно.
рулить надо от this... по логике, которую рассказал мне код (?) у тебя так и должно происходить. ты это написал сам |
Сейчас у меня при наведении курсора на любую из категорий - показываются субменю для ВСЕХ категорий какие есть... а мне нужно что бы только для той на которую наведен курсор.
Вот как выводятся категории: <ul class="pagecateg"> <li > <div class="categimg" ><a href="http://" title=""> <img src="" title="" alt=""/ onMouseOver="find_sp()" onMouseOut="setTimeout('hide_sp()', 5000)" ></a></div> <p class="categname" style="padding-bottom:5px" > <a href="http://" title="" >Text </a></p> <div class="sp" style='visibility:hidden;'> <div class="subcat"> <a href="http:" title=""> Название субкатегории</a> </div></div> категорий много (больше 10) и таких вот блоков - тоже будет много... они все одинаковые, вот и получается что при наведении мыши на любую категорию - делаются видимыми субкатегории у всех... |
тут переписанный скрипт, с комментами. html я не трогал, так что именно из-за этого так реализовано. и не использовал getElementsByClassName. поддержка, знаете ли.
вот копия того же скрипта
var i = document.getElementsByTagName("div"),
a = i.length,
img,
mouseoverDivCateg;
// назначаем обработчики.
while( a-- ) if ( i[a].className === 'categimg' ) {
// img - картинка внутри div с классом categimg.
img = i[a].getElementsByTagName('img')[0];
img.onmouseover = find_sp;
img.onmouseout = hide_sp;
}
function find_sp(e) {
var parent, currElem = e ? e.target : event.srcElement;
// ищем li , с которой начинается текущая категория.
while( currElem.tagName.toLowerCase() !== 'li' ) currElem = currElem.parentNode;
// ищем div с классом sp, который относится к текущей категории
var div = currElem.getElementsByTagName("div"),i = div.length;
while( i-- ) if (div[i].className === "sp") break;
div = div[i];
div.style.visibility = "visible";
// сохраняем этот дивчик, чтобы потом не искать
mouseoverDivCateg = div;
}
function hide_sp() {
// скрываем сохраненный див
mouseoverDivCateg.style.visibility= "hidden";
}
|
Ругается на: currElem.tagName is undefined и mouseoverDivCateg is undefined почему то...
|
а, да. забыл сказать
HTML трогал. постирай все обработчики в html. типа
<img src="" title="" alt=""/ onMouseOver="find_sp()" onMouseOut="setTimeout('hide_sp()', 5000)" >
преврати в <img src="" title="" alt=""/> |
обновил. я протсто заигрался, и про IE забыл
|
ты знаешь, ругаться не ругается, но и не отрабатывает... ни в Опере, ни Файрфоксе, а в ИЕ отрабатывает но как: при наведении мышью субменю видимыми не становятся, зато при onmouseout пропадает categname (имя категории становится невидимым)
|
|
<div class="sp" style='visibility:hidden;'> <div class="subcat">
<a href="http:" title=""> Название субкатегории</a> </div></div> а если таких блоков несколько? (то есть субкатегорий по три - четыре штуки) ? не могу понять... у тебя работает, у меня - нет... хм... |
| Часовой пояс GMT +3, время: 07:05. |