Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Защита значения переменной.. (https://javascript.ru/forum/events/30624-zashhita-znacheniya-peremennojj.html)

gJam 10.08.2012 09:25

Защита значения переменной..
 
Добрый день!
У меня вопрос, как можно "защитить" значение переменной?
Суть: есть таймер, в который передается значение с помощью php..
Это значение используется в методе таймера..
Но банальный: javascript: param = n; где n-временное значение.
Отбрасывают таймер на необходимое значение..
Как "защитить" эту переменную от такого шага?
(переприсваивание в теле тоже не выход.. так как и те "переприсвоенные" можно поменять..)
OnChange вешать тоже на мой взгляд бессмысленно, ведь переменная таймера всегда меняется..

Deff 10.08.2012 09:39

gJam,
код таймера в студию

gJam 10.08.2012 09:40

function processTimer(){
           
  if (limit > 0) {
    setTimeout("processTimer()",1000);
    limit--;
  } else {
    timer_hour = '00'
    timer_min = '00'
    timer_sec = '00'
    /*document.testCheck.submit();*/
  }  
  var timer_hour = parseInt(limit/3600);
  var temp_min = limit - timer_hour*3600;
  var timer_min = parseInt(temp_min/60); 
  var timer_sec = temp_min - timer_min*60;
  
  if (timer_hour < 10) timer_hour = '0'+timer_hour;
  if (timer_min < 10) timer_min = '0'+timer_min;
  if (timer_sec < 10) timer_sec = '0'+timer_sec;
  
  // вывод времени
  document.getElementById('hour_timer').innerHTML=timer_hour;
  document.getElementById('minute_timer').innerHTML=timer_min;
  document.getElementById('second_timer').innerHTML=timer_sec;
}

Limit получает значение "снаружи", при генерации страницы..
т.е.
<script type='text/javascript'>Var limit = (предположим) 500;</script>
<script type='text/javascript' src='путь до файла с методом'></script>

Deff 10.08.2012 09:42

gJam,
Какую переменную защищаем ?

gJam 10.08.2012 09:45

которая является носителем времени, т.e. limit

gJam 10.08.2012 10:02

Дзен-трансгуманист,
Но и таймер перестаёт работать..
После функции таймера еще есть:
processTimer;
var saveOnLoad = window.onload;
window.onload = function(){
    saveOnLoad();
    processTimer();
}

Вызов функции и помещение в onload с сохранением предыдущих функций
т.е. похоже ошибка в работе связана с обращение к processTimer

vadim5june 10.08.2012 10:13

Цитата:

Сообщение от gJam
переприсваивание в теле тоже не выход.. так как и те "переприсвоенные" можно поменять.

переприсвоенные будут уже локальными переменными и защищены от случайного изменения на глобальном уровне

gJam 10.08.2012 10:16

Цитата:

Сообщение от vadim5june (Сообщение 196120)
переприсвоенные будут уже локальными переменными и защищены от случайного изменения на глобальном уровне

Как сейчас обратиться к функции представленной Дзен-трансгуманистом?

gJam 10.08.2012 10:28

Большое спасибо всем участникам обсуждения!

Deff 10.08.2012 10:32

gJam,
<script type="text/javascript">
var limit = 10
var DecrTimer = (function( limit ){
    var Lm2 = limit+1;
    return LIM=function () {
	Lm2--;
         return Lm2;
    }
})(limit)

alert(LIM())
alert(LIM())
alert(LIM())
</script>


Внутри функции processTimer() пользуетесь не limit - а такой конструкцией Tim=LIM()

cyber 10.08.2012 23:21

может пригодится , была похожая тема на другом форуме и я написал такой скрипт
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <div id='timer'></div>
    <a href='#' id='link'>start</a>
    <script>

      function countdown (opt) {
      
       var sec = opt.time;
       var button = document.getElementById(opt.button); 
       var elem = document.getElementById(opt.innerID); 
        
        button.onclick = function () {
        
          button.onclick = function () {return false;};  
          
        timer_on();
          
        return false;
        } 
        
        
        function timer_on () {
      
          elem.innerHTML = sec;  
        
       var id_inte = setInterval(function () {
        
         if (sec == 0) {
           clearInterval (id_inte);
           opt.end_function();
           return;
         }
         
        sec--;
         
        elem.innerHTML = sec; 
        },1000);
        
      }
      
      }
      
      countdown({
        innerID: 'timer', //id элемента в котором будет отсчет
        button: 'link',//id кнопки запуска
        time: 10, // время отсчета (в секундах)
        end_function: timer_end // функция котороая будет вызвана после окончания отсчета
      });
      
      
      function timer_end () {
      
      alert('конец')
      
      }

      
    </script>

  </body>
</html>

тут в живую http://learn.javascript.ru/play/cZt6oc


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