Javascript.RU

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

Передать в функцию click значение из for
День добрый коллеги.
Вопрос из области для новичков, но ответ так и не смог найти.
Есть код (выдраный из контекста), еще я использую raphael.js


var sin_2 =0;
var paper_all = new Array(); 

function drawZ (){
paper.clear();
var all  = id_ar.length-1;
sin_2+=0.007;
for(i=0;i<=all;i++){
var sin = sin_2 + (0.7*i);
var x = Math.sin(sin)*radius+center.x;
var y = Math.cos(sin)*radius+center.y;
paper_all[i] = new Object;
paper_all[i].p = paper.text(x,y,number_ar[i]); 
paper_all[i].p.attr("font-size", "30");
paper_all[i].id  = i;
paper_all[i].p.click(function() {
//hand(id_ar[i]);
alert(paper_all[i].id ); // вот так не работет
});
}//for
}//end drawZ

Задача передать в alert значение i на момент инкреминации (счетчик цикла), если написать типа
alert(i);

то будет i на момент окончание цикла (i=0;i<9;i++) тоесть 9
Как сделать счелкаешь на элементы и будет 1 на первом, 2 на втором и т.д.? Я уже второй раз сталкиваюсь, да и если что то другое вы видите можно лучше написать я только за.

Последний раз редактировалось flyfrog, 03.11.2013 в 23:03.
Ответить с цитированием
  #2 (permalink)  
Старый 03.11.2013, 23:20
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от flyfrog
ответ так и не смог найти.
http://javascript.ru/basic/closure
Ответить с цитированием
  #3 (permalink)  
Старый 03.11.2013, 23:36
Новичок на форуме
Отправить личное сообщение для flyfrog Посмотреть профиль Найти все сообщения от flyfrog
 
Регистрация: 15.03.2013
Сообщений: 8

А можно для меня разжевать - на моем примере? Там ни где нет ситуации когда функция генерит и навешивает обработчики по for. Для одного элемента = вызова и у меня работает.

Последний раз редактировалось flyfrog, 03.11.2013 в 23:45.
Ответить с цитированием
  #4 (permalink)  
Старый 03.11.2013, 23:48
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Наверно прозрачней всего заполнить атрибут data= на теге
Хотя можно конечно к объекту добавить новое свойство
Ответить с цитированием
  #5 (permalink)  
Старый 04.11.2013, 00:15
Новичок на форуме
Отправить личное сообщение для flyfrog Посмотреть профиль Найти все сообщения от flyfrog
 
Регистрация: 15.03.2013
Сообщений: 8

Data???? Это от куда взялось (у меня там нет тэгов). Пожалуста мысли оформляйте в код, то есть подставил работает не работает. А так это просто рассуждения.
Ответить с цитированием
  #6 (permalink)  
Старый 04.11.2013, 00:27
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от flyfrog
А можно для меня разжевать - на моем примере? Там ни где нет ситуации когда функция генерит и навешивает обработчики по for. Для одного элемента = вызова и у меня работает.
Разжевываю. По ссылке есть подраздел: "Пример ошибочного использования" - типичный ваш случай. Сравните:
Сообщение от flyfrog
Задача передать в alert значение i на момент инкреминации (счетчик цикла), если написать типа alert(i); то будет i на момент окончание цикла (i=0;i<9;i++) тоесть 9
Цитата:
Такой глюк возник из-за того, что все функции div[i].onclick получают значение i из одного на всех [[scope]] внешней функции. А это значение ([[scope]].i) на момент активации onclick-обработчика равно 10 (цикл завершился как только i==10).
Сообщение от flyfrog
Пожалуста мысли оформляйте в код
Пожалуйста, оформляйте благодарность в wmz - будет вам готовый код
Ответить с цитированием
  #7 (permalink)  
Старый 04.11.2013, 00:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

flyfrog,
тут же всё разжёвано Пример ошибочного использования

var sin_2 =0,
    paper_all = new Array();

function drawZ (){
paper.clear();
var all  = id_ar.length;
sin_2+=0.007;
for(i=0;i<all;i++){
var sin = sin_2 + (0.7*i);
var x = Math.sin(sin)*radius+center.x;
var y = Math.cos(sin)*radius+center.y;
paper_all[i] = new Object;
paper_all[i].p = paper.text(x,y,number_ar[i]);
paper_all[i].p.attr("font-size", "30");
paper_all[i].id  = i;
paper_all[i].p.click((function(a) {
return function ()
{
  alert(paper_all[a].id );
}

})(i));
}
}
Ответить с цитированием
  #8 (permalink)  
Старый 04.11.2013, 00:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

BETEPAH,
чёто я с кодом поспешил сорри
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2013, 00:35
Новичок на форуме
Отправить личное сообщение для flyfrog Посмотреть профиль Найти все сообщения от flyfrog
 
Регистрация: 15.03.2013
Сообщений: 8

Спасибо. Хоть вы и сказали что я знал и ни капли не помогли спасибо. Решение данного "глюка" у меня есть но оно не красивое (для изящнего js) я думал другие уже придумали как это решается - красиво.
Ответить с цитированием
  #10 (permalink)  
Старый 04.11.2013, 00:51
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

рони,
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 08:42
Как передать переменную в другую функцию adder-vb jQuery 3 31.01.2013 14:29
Передать значение в функцию bes Общие вопросы Javascript 5 18.10.2012 21:34
Как передать в функцию значение а не ссылку на переменную? Ghaniball Общие вопросы Javascript 4 02.09.2011 18:24
Не получается передать в функцию значение javascript_pupil Events/DOM/Window 9 06.11.2009 15:32