Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.07.2011, 13:29
Интересующийся
Отправить личное сообщение для Anpl Посмотреть профиль Найти все сообщения от Anpl
 
Регистрация: 24.07.2011
Сообщений: 15

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)

Ребят, подскажите, как реализовать это так, что бы при наведении мыши видимым становлися только блок для одной категории?
Ответить с цитированием
  #2 (permalink)  
Старый 24.07.2011, 14:31
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

покажи html. нифига не ясно.

рулить надо от this...

по логике, которую рассказал мне код (?) у тебя так и должно происходить. ты это написал сам
Ответить с цитированием
  #3 (permalink)  
Старый 24.07.2011, 14:55
Интересующийся
Отправить личное сообщение для Anpl Посмотреть профиль Найти все сообщения от Anpl
 
Регистрация: 24.07.2011
Сообщений: 15

Сейчас у меня при наведении курсора на любую из категорий - показываются субменю для ВСЕХ категорий какие есть... а мне нужно что бы только для той на которую наведен курсор.

Вот как выводятся категории:



<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) и таких вот блоков - тоже будет много... они все одинаковые, вот и получается что при наведении мыши на любую категорию - делаются видимыми субкатегории у всех...
Ответить с цитированием
  #4 (permalink)  
Старый 24.07.2011, 20:47
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

тут переписанный скрипт, с комментами. 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";
}

Последний раз редактировалось melky, 24.07.2011 в 21:41.
Ответить с цитированием
  #5 (permalink)  
Старый 24.07.2011, 21:31
Интересующийся
Отправить личное сообщение для Anpl Посмотреть профиль Найти все сообщения от Anpl
 
Регистрация: 24.07.2011
Сообщений: 15

Ругается на: currElem.tagName is undefined и mouseoverDivCateg is undefined почему то...
Ответить с цитированием
  #6 (permalink)  
Старый 24.07.2011, 21:39
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

а, да. забыл сказать

HTML трогал. постирай все обработчики в html.

типа

<img src="" title="" alt=""/ onMouseOver="find_sp()" onMouseOut="setTimeout('hide_sp()', 5000)" >


преврати в

<img src="" title="" alt=""/>
Ответить с цитированием
  #7 (permalink)  
Старый 24.07.2011, 21:41
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

обновил. я протсто заигрался, и про IE забыл
Ответить с цитированием
  #8 (permalink)  
Старый 24.07.2011, 22:05
Интересующийся
Отправить личное сообщение для Anpl Посмотреть профиль Найти все сообщения от Anpl
 
Регистрация: 24.07.2011
Сообщений: 15

ты знаешь, ругаться не ругается, но и не отрабатывает... ни в Опере, ни Файрфоксе, а в ИЕ отрабатывает но как: при наведении мышью субменю видимыми не становятся, зато при onmouseout пропадает categname (имя категории становится невидимым)
Ответить с цитированием
  #9 (permalink)  
Старый 24.07.2011, 22:19
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

не знаю, что ты имел в виду.. наводить на картинку надо было.

заменил картинки

Последний раз редактировалось melky, 24.07.2011 в 22:26.
Ответить с цитированием
  #10 (permalink)  
Старый 24.07.2011, 23:12
Интересующийся
Отправить личное сообщение для Anpl Посмотреть профиль Найти все сообщения от Anpl
 
Регистрация: 24.07.2011
Сообщений: 15

<div class="sp" style='visibility:hidden;'> <div class="subcat">
<a href="http:" title="">
Название субкатегории</a>

</div></div>

а если таких блоков несколько? (то есть субкатегорий по три - четыре штуки) ? не могу понять... у тебя работает, у меня - нет... хм...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с div И animate g00000dman jQuery 2 24.03.2011 23:34
Закрытие прозрачного div при щелчке мыши в любой его области mav1 Элементы интерфейса 8 09.02.2011 19:25
Проблема с load в div и импортом стороннего кода с помощью javascript 1quick1 Events/DOM/Window 9 04.02.2011 13:16
получить значение свойства class у div Leax Events/DOM/Window 8 07.02.2010 20:00
Появление блоков div в зависимости от radio Oracool Events/DOM/Window 1 04.12.2009 18:39