Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переменная в цикле (https://javascript.ru/forum/misc/34796-peremennaya-v-cikle.html)

Павел Пичужкин 19.01.2013 16:54

Переменная в цикле
 
Здравствуйте! Я делаю гаджет для Windows Sidebar. Что-то вроде календаря. И я хочу чтобы с помошью JS в код добавлялись 6 кнопочек, при нажатии на каждую из которых страница прокручивалась на опеределёный день (за это отвечает функция scrolling). Если я задаю параметр функции вручную, всё работает, НО для экономии места желательно это сделать через цикл, т. к. этот код подгружается с инета. Ниже мой вариант кода, но при нажатии на любую из кнопочек страница вообще уезжает непонятно куда :( . Я думаю, что во время вызова функции scrolling, в переменной dw стоит какое-то неадекватное число. Кто что может, подскажите, а то я замучался с этой проблемой.
for (dw=0; dw<6; dw++)
{
    var parent = document.getElementsByTagName('body')[0];
    var el = document.createElement('div');
    el.id = 'day';
    el.style.background = '#c53757';
    el.onclick =  function() {scrolling(dw);}
    dw++;
    parent.appendChild(el);
}

При выполнении этого цикла,

JsLoveR 19.01.2013 17:03

цикл у вас 3 раза проходит, dw лишний раз в теле цикла итерируется

dmitriymar 19.01.2013 17:04

в http://learn.javascript.ru/ , или поиск по сайту .3й за последние 3 дня с этим вопросом

dmitriymar 19.01.2013 17:06

Цитата:

Сообщение от JsLoveR
цикл у вас 3 раза проходит

а это то при чём?
Цитата:

Сообщение от Павел Пичужкин
el.onclick = function() {scrolling(dw);}

dw всегда будет равно 6
(function(dw){el.onclick =  function() {scrolling(dw);}})(dw);

dmitriymar 19.01.2013 17:11

Цитата:

Сообщение от Павел Пичужкин
Почему 3 раза? Там же задано с 0 до 5

Цитата:

Сообщение от Павел Пичужкин
01 for (dw=0; dw<6; dw++)

Цитата:

Сообщение от Павел Пичужкин
08 dw++;

при этом увеличивается на 2 за 1 проход
начните с основ языка -вы переменные объявлять не умеете dw тоже переменная

Павел Пичужкин 19.01.2013 17:25

Подставил ваш код, заработало! Благодарю за помощь! :thanks: Я только учусь, видимо невнимательно про переменные читал :(. Можно ещё один вопрос:
el.onclick =  function() {scrolling(1);}
у меня после долгих попыток только так получилось событие сделать. Что же неправильного в записи ниже?
el.onclick = scrolling(1);

В других гаджетах такая запись проходит спокойно.

danik.js 19.01.2013 17:26

Цитата:

Сообщение от dmitriymar
Сообщение от Павел Пичужкин
Почему 3 раза? Там же задано с 0 до 5

Чет не вижу этого сообщения. Или это режим телепата?

Цитата:

Сообщение от Павел Пичужкин
Что же неправильного в записи ниже

ставим за именем функции скобки - значит вызываем ее немедленно (в случае с анонимной функцией это аналогично
el.onclick = (function() {scrolling(dw);})();
), вместо того, чтобы присвоить функцию, мы присваиваем результат ее выполнения.

Павел Пичужкин 19.01.2013 17:47

Понятно. Благодарю за разъяснение! :yes:


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