Javascript.RU

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

НЕ получается правильно организовать цикл
Есть небольшой кусочек кода, с помощью которого идет появление/скрытие элемента при наведении на ссылку.
Чтобы не прописывать код отдельно для каждой ссылки (сейчас ссылок 8, хотя может быть много), решил организовать цикл, но из-за jquery, как я понял он работает некорректно, а именно всегда в событии переменные classEl='#elem-8' и classBut='#menu-but-8'.
В итоге, при наведении, вместо необходимых, отображается всегда последний элемент.

Подскажите что именно делаю не так?

Код скрипта:
<script type="text/javascript">
$(document).ready(function() {

	for(i=1; i<=8; i++) {
		var classEl;
		classEl = '#elem-' + i;
		var classBut;
		classBut = '#menu-but-' + i;
		
		
		$(classBut).hover(
			function(){
				$(classEl).stop(true, true).fadeIn(500);
				$("#inner-block").stop(true, true).fadeOut(1000);
			},
			function(){
				$(classEl).stop(true, true).fadeOut(1400);
				$("#inner-block").stop(true, true).fadeIn(600);
			}
		);
	}

});
</script>


Код ХТМЛ:
<div id="block-menu">
			<div class="index-images">
				<div style="background: url(img/img-1.gif)"></div>
				<div style="background: url(img/img-2.gif)"></div>
				<div style="background: url(img/img-3.gif)"></div>
				<div style="background: url(img/img-4.gif)"></div>
				<div style="background: url(img/img-5.gif)"></div>
				<div style="background: url(img/img-6.gif)"></div>
				<div style="background: url(img/img-7.gif)"></div>
				<div style="background: url(img/img-8.gif)"></div>
			</div>
			<div id="inner-block"></div>
			
			<a href="#" id="menu-but-1">бла бла бла</a>
			<div id="elem-1"></div>
			
			<a href="#" id="menu-but-2">бла бла бла</a>
			<div id="elem-2"></div>
			
			<a href="#" id="menu-but-3">бла бла бла</a>
			<div id="elem-3"></div>
			
			<a href="#" id="menu-but-4">бла бла бла</a>
			<div id="elem-4"></div>

			<a href="#" id="menu-but-5">бла бла бла</a>
			<div id="elem-5"></div>

			<a href="#" id="menu-but-6">бла бла бла</a>
			<div id="elem-6"></div>

			<a href="#" id="menu-but-7">бла бла бла</a>
			<div id="elem-7"></div>

			<a href="#" id="menu-but-8">бла бла бла</a>
			<div id="elem-8"></div>
		</div>
Ответить с цитированием
  #2 (permalink)  
Старый 18.10.2011, 17:40
Аватар для Serg_pnz
Сам по себе
Отправить личное сообщение для Serg_pnz Посмотреть профиль Найти все сообщения от Serg_pnz
 
Регистрация: 09.06.2009
Сообщений: 963

Раз уж jquery, то
http://jquery.page2page.ru/index.php...BE%D1%80%D0%B5
http://jquery.page2page.ru/index.php...80%D0%BE%D0%BC

а для обхода массива
http://jquery.page2page.ru/index.php...BE%D1%80%D0%B0

потом, если они идут друг за другом (заголовок и его текст) можно и на этом попробовать сделать
http://jquery.page2page.ru/index.php...BD%D1%8B%D1%85
Ответить с цитированием
  #3 (permalink)  
Старый 18.10.2011, 18:31
Интересующийся
Отправить личное сообщение для Kaba Посмотреть профиль Найти все сообщения от Kaba
 
Регистрация: 18.10.2011
Сообщений: 19

Спасибо за быстрый и конструктивный ответ.
Воспользовался выборкой с помощью next, что то я совсем про него забыл..
Ответить с цитированием
  #4 (permalink)  
Старый 24.10.2011, 17:25
Аватар для Андрей38
Профессор
Отправить личное сообщение для Андрей38 Посмотреть профиль Найти все сообщения от Андрей38
 
Регистрация: 11.12.2010
Сообщений: 261

Подскажите пожайлуста_есть ли в цикле for какой нибудь флаг,что цикл ЗАКОНЧЕН (те все элементы в цикле-пройдены) ?Я сделал это через ИФ_ ленгз==x {}но хотелось бы нормальное (его родное)решение
__________________
http://www.youtube.com/watch?feature...&v=cz0uN1ZNuM0
История не в теории ,а по факту

Последний раз редактировалось Андрей38, 24.10.2011 в 17:27. Причина: ЕГО РОДНОЕ
Ответить с цитированием
  #5 (permalink)  
Старый 24.10.2011, 17:28
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Некаких спец инструметов не существует.

Чтобы прервать цикл посередине юзай. if (условие) break;

Без команды break, можно обойтись как то так. Правда в отказе от break нет смысла
var breakTrigger=false;
for (var i=0;(i<100) && (!breakTrigger);i++){
  alert(i);
  if (i==3) breakTrigger=true;
}
// тут типо всякий код

// проверяем триггер и узнаем прерывался ли цикл
if (breakTrigger) alert("цикл закончен раньше времени")


Чтобы за пределами цикла посмотреть был ли прерван цикл устанавливай какой нибудь тригер внутри цикла, как в примере выше, и проверяй триггер там где тебе надо


Это что за запись такая : ИФ_ ленгз==x {} ?
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 24.10.2011 в 18:22.
Ответить с цитированием
  #6 (permalink)  
Старый 24.10.2011, 18:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,134

Сообщение от Андрей38
есть ли в цикле for какой нибудь флаг,что цикл ЗАКОНЧЕН (те все элементы в цикле-пройдены)
Если в теле цикла нет break и ты получил управление в следующей "строке" после цикла - он таки закончился (те все элементы в цикле-пройдены).
Ответить с цитированием
  #7 (permalink)  
Старый 24.10.2011, 20:40
Аватар для Андрей38
Профессор
Отправить личное сообщение для Андрей38 Посмотреть профиль Найти все сообщения от Андрей38
 
Регистрация: 11.12.2010
Сообщений: 261

Спасибо !
Я так и сделал ,и без брик_хотя с брик продвинутей выглядит
Вот так я сделал с самого начала

var t=$('div.w').length
тут цикл for ()
...If (i-1==t-1){
исполнение какого-то кода
}
__________________
http://www.youtube.com/watch?feature...&v=cz0uN1ZNuM0
История не в теории ,а по факту

Последний раз редактировалось Андрей38, 24.10.2011 в 20:44.
Ответить с цитированием
  #8 (permalink)  
Старый 24.10.2011, 20:42
Аватар для Андрей38
Профессор
Отправить личное сообщение для Андрей38 Посмотреть профиль Найти все сообщения от Андрей38
 
Регистрация: 11.12.2010
Сообщений: 261

Сообщение от ksa Посмотреть сообщение
Если в теле цикла нет break и ты получил управление в следующей "строке" после цикла - он таки закончился (те все элементы в цикле-пройдены).
Спасибо,понял.Будем писать по -старинке ,те через иф.
__________________
http://www.youtube.com/watch?feature...&v=cz0uN1ZNuM0
История не в теории ,а по факту
Ответить с цитированием
  #9 (permalink)  
Старый 25.10.2011, 09:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,134

Сообщение от Андрей38
var t=$('div.w').length
У жиквери есть прекрасный метод each() для обхода "выборки"...
http://jquery-docs.ru/core/each/

И форы там всякие можно не писать...
Ответить с цитированием
  #10 (permalink)  
Старый 25.10.2011, 12:56
Аватар для Андрей38
Профессор
Отправить личное сообщение для Андрей38 Посмотреть профиль Найти все сообщения от Андрей38
 
Регистрация: 11.12.2010
Сообщений: 261

Сообщение от ksa Посмотреть сообщение
У жиквери есть прекрасный метод each() для обхода "выборки"...
http://jquery-docs.ru/core/each/

И форы там всякие можно не писать...
Спасибо за полезное напоминание об each
Я как раз перешел с each на for,так как FOR это новое для меня и допускает много эксперементов
__________________
http://www.youtube.com/watch?feature...&v=cz0uN1ZNuM0
История не в теории ,а по факту
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бесконечный цикл Sundro Общие вопросы Javascript 8 08.08.2011 13:58
Не получается поменять высоту div revvo jQuery 4 06.08.2011 13:12
как правильно применить цикл while в этом скрипте? Дмитрий_Кирсанов Общие вопросы Javascript 5 18.01.2011 15:30
Как правильно прописать свой код в .js Всеми_Любимый Элементы интерфейса 6 23.02.2010 21:34
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20