Индивидуальные переменные в 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];
});
});
но создать такие переменные с квадратными скобками нельзя, есть какие-то еще выходы? |
Я бы поменял html структуру. Например, навесил бы 2 класса типа
<div class="game game_id_16" my_id="16">, где 16 будет конкретным id. Так проще будет работать с конкретным блоком... |
Не пойдет, у меня может быть 3 блока, а может 23 и к каждому руками классы прописывать?
Я могу навесить классы прям в each с уникальным номером класс будет и обращаться к конкретному блоку,
$('.game').each(function(i){
$(this).addClass("hay" + i)
});
а смысл, как дальше для индивидуального блока свой таймер или свою переменную со временем сделать |
Цитата:
Цитата:
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 структуру. |
Цитата:
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];
});
});
То есть заранее создаем сначала массивы, а потом просто добавляем элементы в уже созданные массивы. |
а чем тебе не устраивать сделать просто вот так ?
$('.game a').live('click', function(){
// тут твой код загрузчика
});
|
Цитата:
|
| Часовой пояс GMT +3, время: 04:44. |