Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Событие onclick и контект вызова (https://javascript.ru/forum/events/65623-sobytie-onclick-i-kontekt-vyzova.html)

Anhk 30.10.2016 12:31

Событие onclick и контект вызова
 
Есть след. код:
<body>   
	<button onclick='timer()'>Десятичный таймер секунд</button>
	<button onclick='timerBinary()'>Бинарный таймер секунд</button>

	<p id='paragraph' style='font-size:200px' align='center'></p>
    </body>
	
	<script>
	function timer(){
		var timer = setInterval(function(){
		var z = document.getElementById('paragraph');
		var date = new Date();
		z.innerHTML = date.getSeconds();}
		, 1000);
	}
	
	function timerBinary(){
		var timerBinary = setInterval(function(){
		var z = document.getElementById('paragraph');
		var date = new Date();
		z.innerHTML = (date.getSeconds()).toString(2);}
		, 1000);
	}
	
	</script>

При нажатии на некоторую кнопку, выполняется нужно событие и выводится таймер секунд в том или ином формате.
Окей, но хочу добавить код, чтобы было так: если один из таймеров уже включен, а я нажал на новый, то старый просто переставал работать. Т.е. нужно выполнить clearInterval.
Но как правильно указать контекст вызова этого метода? Читаю, но пока не понятно.

Aetae 30.10.2016 15:19

Сохранять отдельно надо. Если таймер всегда должен быть в одном экземпляре, то проще всего сделать так:
function timer(){
  clearInterval(timer._interval);
  
  timer._interval = setInterval(function(){
    //код
  }, 1000);
}
или так
function timer(){
  if(timer._interval) return; //просто ничего не делаем, раз уже запущен
  
  timer._interval = setInterval(function(){
    //код
  }, 1000);
}
Т.к. функции в js - объекты, тут мы просто назначаем свойство с нужным значением.


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