Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.07.2014, 19:05
Аспирант
Отправить личное сообщение для dasser Посмотреть профиль Найти все сообщения от dasser
 
Регистрация: 17.06.2014
Сообщений: 56

таймер по суме чекбоксов
Всем привет! есть задача - сделать таймер с обратным отсчетом времени для формы если выбраны один ели несколько checkbox'ов. value checkbox'ов - количество сумирующихся секунд.
Форма:
<form name="formText">
<input type="checkbox"  id="r1" value="10"> 10 сек<br>
<input type="checkbox"  id="r2" value="20"> 20 сек<br>
<input type="checkbox"  id="r3" value="30"> 30 сек<br>
<input type="checkbox"  id="r4" value="40"> 40 сек<br>
<input type="checkbox"  id="r5" value="50"> 50 сек<br><br>

<input type="button" onclick="sums()" value="считай">
<br>Время на тест:
<input style="width:20px;" type="text" name="sumOut" disabled="false" value="">сек.
</form>
 <div class="pr"></div>

Код:
function sums()
{
 sum=0;
 for(i=1;i<6;i++)
 { 
  var elem=document.getElementById("r"+i);
  if(elem.checked)sum=sum+parseInt(elem.value);
 }
 document.formText.sumOut.value=sum;
}

$(window).load(function(){
var $progressBar = $(".pr"), $legend = $('.prspan');
    count = 0, 
	last_time = 10,
	laster = 0,
    ticks = 100, prc = 0, dt = ticks / last_time, 
    timer = $.timer(function() {
        count++;
        prc = (((count/60) * 100) / (ticks/60)).toFixed(0);
        $progressBar.css({width: prc + "%"});
        laster = last_time - Math.round(count / dt);
        $legend.html(prc + ' %' + ' - <i style="font-size:70%;">' + "(осталось" + laster + " сек)</i>");
        if (count >= ticks) {
            timer.stop();
        }
		return false;
    });
timer.set({ time : 1000 / dt, autostart : true });
});

остановился на обновлении сумы для счетчика после выбора checkbox'ов. Думаю решается через ajax, но как? спс

Последний раз редактировалось dasser, 31.07.2014 в 19:44.
Ответить с цитированием
  #2 (permalink)  
Старый 31.07.2014, 20:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от dasser
Думаю решается через ajax
а причём тут ajax?
Ответить с цитированием
  #3 (permalink)  
Старый 31.07.2014, 20:24
Аспирант
Отправить личное сообщение для dasser Посмотреть профиль Найти все сообщения от dasser
 
Регистрация: 17.06.2014
Сообщений: 56

Сообщение от рони Посмотреть сообщение
а причём тут ajax?
так хочется чтобы даже без выбора checkbox'а таймер отсчитывал минимальное значение "sum=0". А без ajax не получиться
Ответить с цитированием
  #4 (permalink)  
Старый 31.07.2014, 20:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от dasser
так хочется чтобы даже без выбора checkbox'а таймер отсчитывал минимальное значение "sum=0". А без ajax не получиться
непереводимая игра слов повторюсь
Сообщение от рони
а причём тут ajax?
Ответить с цитированием
  #5 (permalink)  
Старый 31.07.2014, 21:13
Аспирант
Отправить личное сообщение для dasser Посмотреть профиль Найти все сообщения от dasser
 
Регистрация: 17.06.2014
Сообщений: 56

рони,
а как реализовать вышеупомянутую идею, - через переменную внутри функции ?
Ответить с цитированием
  #6 (permalink)  
Старый 31.07.2014, 21:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

dasser,
$.timer это что?
Ответить с цитированием
  #7 (permalink)  
Старый 01.08.2014, 00:27
Аспирант
Отправить личное сообщение для dasser Посмотреть профиль Найти все сообщения от dasser
 
Регистрация: 17.06.2014
Сообщений: 56

Сообщение от рони Посмотреть сообщение
dasser,
$.timer это что?
береться из http://jquery-timer.googlecode.com/s...query.timer.js
Ответить с цитированием
  #8 (permalink)  
Старый 01.08.2014, 01:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

dasser,

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
   .pr {
     height: 5px;
     width: 0px;
     background: #FF0000;
   }

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
  	(function($)
  	  {
  	    $.timer = function(func, time, autostart) {
  	      this.set = function(func, time, autostart) {
  	        this.init = true;
  	        if(typeof func == 'object') {
  	          var paramList =['autostart', 'time'];
  	          for(var arg in paramList) {if(func[paramList[arg]] != undefined) {eval(paramList[arg] + " = func[paramList[arg]]");}};
  	          func = func.action;
  	        }
  	        if(typeof func == 'function') {this.action = func;}
  	        if(!isNaN(time)) {this.intervalTime = time;}
  	        if(autostart && !this.isActive) {
  	          this.isActive = true;
  	          this.setTimer();
  	        }
  	        return this;
  	      };
  	      this.once = function(time) {
  	        var timer = this;
  	        if(isNaN(time)) {time = 0;}
  	        window.setTimeout(function() {timer.action();}, time);
  	        return this;
  	      };
  	      this.play = function(reset) {
  	        if(!this.isActive) {
  	          if(reset) {this.setTimer();}
  	          else {this.setTimer(this.remaining);}
  	          this.isActive = true;
  	        }
  	        return this;
  	      };
  	      this.pause = function() {
  	        if(this.isActive) {
  	          this.isActive = false;
  	          this.remaining -= new Date() - this.last;
  	          this.clearTimer();
  	        }
  	        return this;
  	      };
  	      this.stop = function() {
  	        this.isActive = false;
  	        this.remaining = this.intervalTime;
  	        this.clearTimer();
  	        return this;
  	      };
  	      this.toggle = function(reset) {
  	        if(this.isActive) {this.pause();}
  	        else if(reset) {this.play(true);}
  	        else {this.play();}
  	        return this;
  	      };
  	      this.reset = function() {
  	        this.isActive = false;
  	        this.play(true);
  	        return this;
  	      };
  	      this.clearTimer = function() {
  	        window.clearTimeout(this.timeoutObject);
  	      };
  	      this.setTimer = function(time) {
  	        var timer = this;
  	        if(typeof this.action != 'function') {return;}
  	        if(isNaN(time)) {time = this.intervalTime;}
  	        this.remaining = time;
  	        this.last = new Date();
  	        this.clearTimer();
  	        this.timeoutObject = window.setTimeout(function() {timer.go();}, time);
  	      };
  	      this.go = function() {
  	        if(this.isActive) {
  	          this.action();
  	          this.setTimer();
  	        }
  	      };
  	      if(this.init) {
  	        return new $.timer(func, time, autostart);
  	      } else {
  	        this.set(func, time, autostart);
  	        return this;
  	      }
  	    };
  	  }
  	)(jQuery);
  	$(function()
  	  {
  	    function sums()
  	    {
  	      var sum = 0;
  	      for(i = 1; i<6; i++)
  	      {
  	        var elem = document.getElementById("r"+i);
  	        if(elem.checked)sum = sum+parseInt(elem.value);
  	      }
  	      document.formText.sumOut.value = sum;
  	      var $progressBar = $(".pr"), $legend = $('.prspan');
  	      count = 0,
  	      last_time = sum,
  	      laster = 0,
  	      ticks = 100, prc = 0, dt = ticks / last_time,
  	      timer = $.timer(function()
  	        {
  	          count++;
  	          prc = (((count/60) * 100) / (ticks/60)).toFixed(0);
  	          $progressBar.css({width: prc + "%"});
  	          laster = last_time - Math.round(count / dt);
  	          $legend.html(prc + ' %' + ' - <i style="font-size:70%;">' + "(осталось" + laster + " сек)</i>");
  	          if (count >= ticks) {
  	            timer.stop();
                s.prop({disabled : false})
  	          }
  	          return false;
  	        }
  	      );
  	      timer.set({time: sum*10, autostart: true});
  	    }
  	    var s = $('[type="button"]');
  	    s.click(function()
  	      { s.prop({disabled : true})
  	        sums()
  	      }
  	    );
  	  }
  	);
  </script>
</head>

<body>
<form name="formText">
<input type="checkbox"  id="r1" value="10"> 10 сек<br>
<input type="checkbox"  id="r2" value="20"> 20 сек<br>
<input type="checkbox"  id="r3" value="30"> 30 сек<br>
<input type="checkbox"  id="r4" value="40"> 40 сек<br>
<input type="checkbox"  id="r5" value="50"> 50 сек<br><br>

<input type="button" value="считай">
<br>Время на тест:
<input style="width:20px;" type="text" name="sumOut" disabled="false" value="">сек.
</form>
 <div class="pr"></div>
 <div class="prspan"></div>
</body>

</html>

Последний раз редактировалось рони, 01.08.2014 в 01:52.
Ответить с цитированием
  #9 (permalink)  
Старый 01.08.2014, 02:05
Аспирант
Отправить личное сообщение для dasser Посмотреть профиль Найти все сообщения от dasser
 
Регистрация: 17.06.2014
Сообщений: 56

рони,
Спасибо, решено! чувтствую сломал бы голову сам.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер до требуемой даты в цикле Drugpunker Events/DOM/Window 22 21.03.2014 08:52
Обновляемый таймер на javascript smillyhamster Общие вопросы Javascript 1 31.12.2013 10:30
Таймер обратного отсчёта useruser Элементы интерфейса 5 04.11.2013 07:29
Таймер обратного отчёта с выполнение по времени xakerd Элементы интерфейса 1 20.03.2013 00:10
Зацикленный таймер jacko Общие вопросы Javascript 2 01.07.2012 14:32