Javascript.RU

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

Hover на объекты, где в качестве селектора используется переменная
Всем привет!
Возникла проблема с данным кодом:

var i = 0;

			var a = '#linkID'+i;
			var b = '#pictID'+i;
	
			
    		if (!$(a).hasClass('blue_links')){

   		   
    		
    			$(a).hover(function() {
    			$(a).css("backgroundImage","url('images/main/button_gray.png')");
    			$(b).css("backgroundImage","url('images/main/pict_background_hover.png')");
     			},function() {
    				$(a).css("backgroundImage","none");
    				$(b).css("backgroundImage","none");
    			});
    		}
    		
    		
    		
			if (!$(b).hasClass('selected')){
				$(b).hover(function() {
    			$(a).css("backgroundImage","url('images/main/button_gray.png')");
    			$(b).css("backgroundImage","url('images/main/pict_background_hover.png')");
   	  		},function() {
    				$(a).css("backgroundImage","none");
    				$(b).css("backgroundImage","none");
    			});
			
			}
			else{
    			$(b).corner('left 5px');
    		}


В чем суть. Хочу чтобы в двухстрочном меню при наведении мыши на нижнюю или на верхнюю часть подсвечивалась соответственно верхняя или нижняя часть меню, т.е. его столбец.
Проблема возникла, когда я попытался в цикле по i менять
var a = '#linkID'+i;
var b = '#pictID'+i;

Эффектом такого изменения становилось то, что обработчик hover вешался только на последний элемент меню, т.е. на тот, на котором останавливался цикл. И наведение мыши на предшествующие элементы вызвывало изменение фона только на последнем столбце меню.
В чем проблема мне не очень ясно, может быть тонкости в том, что переменные - ссылки. Подумав таким образом, я решил использовать массив имен блоков. Но тогда эффекта не было никакого вообще.
В чем может быть проблема?

html:

<div class="links_reg">
						<a href="" class="blue_links" id="linkID0">Профиль</a>
						<a href="" class="white_links" id="linkID1">Контакты</a>
						<a href="" class="white_links" id="linkID2">Задачи</a>
						<a href="" class="white_links" id="linkID3">Сообщения</a>
						<a href="" class="white_links" id="linkID4">Документы</a>
						<a href="" class="white_links" id="linkID5">Уведомления</a>
						<a href="" class="white_links" id="linkID6">Структура</a>
					</div>	


<div id="pict_links">
						<a href="" id="pictID0" class="selected"><img src="images/main/pict_profile.png" width="74" height="80" alt="Профиль" ></a>
						<a href="" id="pictID1"><img src="images/main/pict_peoples.png" width="74" height="80" alt="" ></a>
						<a href="" id="pictID2"><img src="images/main/pict_notes.png" width="74" height="80" alt="" ></a>
						<a href="" id="pictID3">
							<div class="wrapper"><div class="orange_count">100</div></div>
							<img src="images/main/pict_envelope.png" width="74" height="80" alt="" >
						</a>
						<a href="" id="pictID4">
							<div class="wrapper"><div class="blue_count">130</div></div>
							<img src="images/main/pict_book.png" width="74" height="80" alt="" >
						</a>
						<a href="" id="pictID5"><img src="images/main/pict_uved.png" width="74" height="80" alt="" ></a>	
						<a href="" id="pictID6"><img src="images/main/pict_struct.png" width="74" height="80" alt="" ></a>					
					</div>
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2012, 23:17
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Возможно, правильным решением будет :
for(var i = 0; i < *!*Ваше число*/!*; i += 1) {

			var a = '#linkID'+i;
			var b = '#pictID'+i;
	
			
    		if (!$(a).hasClass('blue_links')){
               // оставшаяся часть кода.
*!*
} // don't forget closing bracket
*/!*
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2012, 23:40
Интересующийся
Отправить личное сообщение для Madgeniy Посмотреть профиль Найти все сообщения от Madgeniy
 
Регистрация: 01.06.2012
Сообщений: 14

Я пробовал так сделать, но происходит эффект, описанный выше.
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2012, 00:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Madgeniy,
Во-первых функции пофег такая конструция
if (!$(b).hasClass('selected')){
$(b).hover(function() {

Она будет ставить обработчик на все b (*условия либо нужно ставить внутри, либо обезличивать и переприсваивать,
в данном случае внутри функции проще

Во вторых - сгенерите рабочий пример для песочницы, или дайте ссылку на тестовую страницу

В третьих, - а будет ли работать эта конструкция ?
if (!$(b).hasClass('selected')){

Типовое использование .hasClass:
if ($(a).hasClass()!='selected'){

Последний раз редактировалось Deff, 02.06.2012 в 00:46.
Ответить с цитированием
  #5 (permalink)  
Старый 03.06.2012, 14:46
Интересующийся
Отправить личное сообщение для Madgeniy Посмотреть профиль Найти все сообщения от Madgeniy
 
Регистрация: 01.06.2012
Сообщений: 14

Да, посмотрите, пожалуйста. Уж очень некрасивый и неэффективный вышел JS.
Вложения:
Тип файла: zip test.zip (2.49 Мб, 5 просмотров)
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2012, 00:58
Интересующийся
Отправить личное сообщение для Madgeniy Посмотреть профиль Найти все сообщения от Madgeniy
 
Регистрация: 01.06.2012
Сообщений: 14

http://multi-up.com/713321
Ответить с цитированием
  #7 (permalink)  
Старый 04.06.2012, 13:30
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Madgeniy,
В Опере - Мозилле и Хроме - всё подсвечивается, Ие не проверял




Последний раз редактировалось Deff, 04.06.2012 в 13:32.
Ответить с цитированием
  #8 (permalink)  
Старый 04.06.2012, 21:44
Интересующийся
Отправить личное сообщение для Madgeniy Посмотреть профиль Найти все сообщения от Madgeniy
 
Регистрация: 01.06.2012
Сообщений: 14

Да. Но это лишь потому, что у меня такой огромный JS файл. Я бы хотел все то, что там написано завернуть в цикл. Я пробовал, но получились непонятные эффекты. Хотелось бы это понять.
Ответить с цитированием
  #9 (permalink)  
Старый 04.06.2012, 22:38
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Madgeniy,
А на кой нужен цикл - поясните ?
Просто работаете с двумя классами
1. класс - соотвествует строке
2. класс соответствует колонке - coolsN

При при любом hover на элемент колонки класа coolsN - добавляем третий класс HOVER к обеим элементам в колонке,
при отведении - класс изымаем
Эффекты прописываем в css по классу HOVER

Последний раз редактировалось Deff, 04.06.2012 в 23:35.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменная в качестве фильтра LTDmix jQuery 3 13.02.2011 00:01