Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помощь с циклом (https://javascript.ru/forum/misc/45967-pomoshh-s-ciklom.html)

noak96 22.03.2014 15:45

Помощь с циклом
 
var articlesn = $(".article").length;
for(var i=1;i<=articlesn;i++){
	$("#art"+i).mouseover(function() {
		$("#desc"+i).show(0);
	});
	$("#art"+i).mouseout(function() {
		$("#desc"+i).hide(0);
	});
}

Известно, что элементов с классом article - 12.
Но по работе данного скрипта стало ясно, что в цикле он присваивает переменной i значение 13.
Как сделать так, чтобы в цикле значение переменной i увеличивалось постепенно (собственно, как и должно быть)?

Erolast 22.03.2014 16:04

var articlesn = 12;
for(var i=1;i<=articlesn;i++)
{
    alert(i);
}

С циклом-то у тебя все в порядке. У тебя в другом месте проблема. Смотри - ты пробегаешься по элементам и назначаешь им обработчик события
function() {
        $("#desc"+i).show(0);
    }

, но этот обработчик выполняется не сразу, а только при наведении мышкой. Естественно, там значение переменной i уже совершенно другое.

Вообще, внутри всевозможных обработчиков событий всегда доступна переменная this, в которой содержится ссылка на элемент, которому этот обработчик принадлежит. Попробуй достучаться до нужного desc, используя данные art, на который наводится мышка.

Если не получается достучаться внутри функции, то функцию можно сгенерировать динамически во время выполнения цикла с помощью new Function вот таким образом:
new Function("", "$('#desc"+i+"').hide(0);")

При этом в тело функции будет включена не сама переменная i, а ее значение, и все пройдет, как надо.

рони 22.03.2014 16:09

noak96,
использовать .each вместо for раз у вас jquery и незнаите это Пример ошибочного использования

рони 22.03.2014 16:13

noak96,
да и цикл вам ненужен скорее всего он даже лишний -- приведите структуру с чем работите?

noak96 22.03.2014 16:24

рони, выведены список материалов. При наведении по каждому, должна плавно отображаться определенная информация, а затем снова исчезать.
Получается, нужно к каждому материалу присваивать уникальное число, чтобы затем, при событии MouseOver и MouserOut срабатывали функции.
А чтобы для каждого материала не писать эти функции с событиями, я понял, что удобнее будет написать цикл.

рони 22.03.2014 16:26

noak96,
советы как это сделать циклом выше -- без цикла если интересно нужна структура

рони 22.03.2014 16:28

noak96,
и лучше использовать классы а не id

noak96 22.03.2014 16:29

Цитата:

Сообщение от рони (Сообщение 303783)
noak96,
и лучше использовать классы а не id

почему?

рони 22.03.2014 16:33

Цитата:

Сообщение от noak96
почему?

потому что для описания чего-то однотипного лучше использовать один идентификатор для каждого элемента

Vlasenko Fedor 22.03.2014 16:43

http://learn.javascript.ru/play/vqJLlc


Часовой пояс GMT +3, время: 22:57.