Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.12.2012, 16:11
Интересующийся
Отправить личное сообщение для Spamol Посмотреть профиль Найти все сообщения от Spamol
 
Регистрация: 19.03.2010
Сообщений: 27

Индивидуальные переменные в each
Итак, есть такой код:
$('.game').each(function(i){
       			 $(this).children("a").click(function(){
       			 	
					iFinish = new Date().setTime(new Date().getTime() + 120 * 1000);
					iStart = new Date();
					iDuration = iFinish - iStart;
					
					$(this).everyTime(100, function() {
						iLeftTime = iFinish - new Date(); /* время оставшиеся */
						iRightTime = new Date() - iStart; /*время прощедщие */
						var	iDays = parseInt(iLeftTime / iDms);
                		var iHours = parseInt((iLeftTime - (iDays * iDms)) / iHms);
                        var iMin = parseInt((iLeftTime - (iDays * iDms) - (iHours * iHms)) / iMms);
                        var iSec = parseInt((iLeftTime - (iDays * iDms) - (iMin * iMms) - (iHours * iHms)) / iCms);
                        
                        iPerc = (iRightTime > 0) ? iRightTime / iDuration * 100 : 0;
                        if(Math.round(iPerc) >= 101){
                        
                        }else{
                        $(this).parent().parent().children(".load").html(Math.round(iPerc) + "%");
                        }
                        
                        if(Math.round(iPerc) >= 101){
                        
                        }else{
                        $(this).parent().parent().children(".load").children(".statusBar").width(Math.round(iPerc) + "%");
                        }
                        
                        if(Math.round(iPerc) >= 101){
                        	$(this).parent().parent().children(".time").html('Загружено');
                        }else{
							$(this).parent().parent().children(".time").html(iMin+' мин. '+iSec+' сек.</b>');}
					});
					
					
				 });

				});

На странице много div с классом .game, внутри ссылка, по нажатию на ссылку идет время + бегут проценты и соответственно заполняется шкала загрузки, так вот этих контейнеров несколько, поэтому использую each, нужно чтобы одна функция обслуживала эти контейнеры и время не пересекалось, т.е. переменные куда заносится время iFinish и iStart не переназначались, если я нажму ссылку в нескольких контейнерах, сейчас у них время бежит индентично, потому что эти переменные обновляются при каждом нажатии на новые и первоначальное время сбивается, как создать эти переменные индивидуальные для каждого элемента .game например так то так
$('.game').each(function(i){
       			 $(this).children("a").click(function(){
       			 	var iFinish[i];
       			 	var iStart[i];
       			 	var iDuration[i];
					iFinish[i] = new Date().setTime(new Date().getTime() + 120 * 1000);
					iStart[i] = new Date();
					iDuration[i] = iFinish[i] - iStart[i];
					
				 });
				});

но создать такие переменные с квадратными скобками нельзя, есть какие-то еще выходы?
Ответить с цитированием
  #2 (permalink)  
Старый 05.12.2012, 17:47
Аватар для cmd
cmd cmd вне форума
Профессор
Отправить личное сообщение для cmd Посмотреть профиль Найти все сообщения от cmd
 
Регистрация: 19.03.2011
Сообщений: 177

Я бы поменял html структуру. Например, навесил бы 2 класса типа
<div class="game game_id_16" my_id="16">, где 16 будет конкретным id. Так проще будет работать с конкретным блоком...
__________________
Cogito, ergo sum
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2012, 18:17
Интересующийся
Отправить личное сообщение для Spamol Посмотреть профиль Найти все сообщения от Spamol
 
Регистрация: 19.03.2010
Сообщений: 27

Не пойдет, у меня может быть 3 блока, а может 23 и к каждому руками классы прописывать?

Я могу навесить классы прям в each с уникальным номером класс будет и обращаться к конкретному блоку,
$('.game').each(function(i){
				$(this).addClass("hay" + i)
});

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

Последний раз редактировалось Spamol, 05.12.2012 в 18:44.
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2012, 22:45
Аватар для cmd
cmd cmd вне форума
Профессор
Отправить личное сообщение для cmd Посмотреть профиль Найти все сообщения от cmd
 
Регистрация: 19.03.2011
Сообщений: 177

Цитата:
Не пойдет, у меня может быть 3 блока, а может 23 и к каждому руками классы прописывать?
Нет, конечно, это было бы глупо. Вы же, наверняка, из базы берете данные. В базе есть PRIMARY KEY - его и используйте в качестве идентификатора.
Цитата:
а смысл, как дальше для индивидуального блока свой таймер или свою переменную со временем сделать
Не уверен, что понял вопрос. А разве так не будет работать
function my_start_timer_function(id) {
 var myObject = $('.myclass'+id); // получили наш объект
 myObject.css('color', 'red'); // и код самого бегунка или что там у Вас
}
$('a').click(function() {
  var this_identifikator = $(this).attr('my_id');
  my_start_timer_function(this_identifikator);
});


Посмотрел код в первом посте. Нет... что-то не так. Вы в цикле each пытаетесь навесить событие click... Нет, я думаю, нет. И селектор .children() я не понимаю зачем. Показывайте HTML структуру.
__________________
Cogito, ergo sum

Последний раз редактировалось cmd, 05.12.2012 в 22:56.
Ответить с цитированием
  #5 (permalink)  
Старый 06.12.2012, 08:11
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Spamol
но создать такие переменные с квадратными скобками нельзя, есть какие-то еще выходы?
var iFinish = [];
var iStart = [];
var iDuration [];

$('.game').each(function(i){
                 $(this).children("a").click(function(){
                    iFinish[i] = new Date().setTime(new Date().getTime() + 120 * 1000);
                    iStart[i] = new Date();
                    iDuration[i] = iFinish[i] - iStart[i];
                     
                 });
                });


То есть заранее создаем сначала массивы, а потом просто добавляем элементы в уже созданные массивы.
Ответить с цитированием
  #6 (permalink)  
Старый 07.12.2012, 11:22
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

а чем тебе не устраивать сделать просто вот так ?

$('.game a').live('click', function(){
// тут твой код загрузчика
});
Ответить с цитированием
  #7 (permalink)  
Старый 08.12.2012, 14:34
Интересующийся
Отправить личное сообщение для Spamol Посмотреть профиль Найти все сообщения от Spamol
 
Регистрация: 19.03.2010
Сообщений: 27

Сообщение от danik.js Посмотреть сообщение
var iFinish = [];
var iStart = [];
var iDuration [];

$('.game').each(function(i){
                 $(this).children("a").click(function(){
                    iFinish[i] = new Date().setTime(new Date().getTime() + 120 * 1000);
                    iStart[i] = new Date();
                    iDuration[i] = iFinish[i] - iStart[i];
                     
                 });
                });


То есть заранее создаем сначала массивы, а потом просто добавляем элементы в уже созданные массивы.
Вот прям то что надо, спасиб

Последний раз редактировалось Spamol, 11.12.2012 в 19:01.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальные переменные kilogram Серверные языки и технологии 3 30.03.2012 15:59
Сеансовые переменные faiq Серверные языки и технологии 2 24.07.2011 10:32
Нужно сравнить дробные переменные netkent Общие вопросы Javascript 1 05.12.2010 18:30
iframe не выносит переменные nemo Серверные языки и технологии 0 23.01.2010 14:25
переменные и ссылки на переменные scuter Общие вопросы Javascript 6 31.08.2008 01:24