Как повторить функцию с теми же параметрами в заданный интервал времени (в настоящее время пытается использовать setTimout) - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть очень простая функция, которая получает цифровое время, и мне было интересно, можно ли сделать "elementToChange" параметром.Когда я пытаюсь сделать это, он застревает в функции setTimout, потому что он не принимает те же параметры.

Есть ли способ изменить код, чтобы я мог просто дать элемент для изменения какпараметр и все еще повторять функцию в заданный интервал времени?

function setDigitalTime(){
  let today = new Date();
  let h = today.getHours();
  let m = today.getMinutes();
  let s = today.getSeconds();
  if(m < 10){m = "0" + m;}
  if(s < 10){s = "0" + s;}
  document.getElementById("elementToChange").innerHTML = h+" : "+m+" : "+s;
  setTimeout(setDigitalTime,500);
} 

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

  function setDigitalTime(setElement){
    let today = new Date();
    let h = today.getHours();
    let m = today.getMinutes();
    let s = today.getSeconds();
    if(m < 10){m = "0" + m;}
    if(s < 10){s = "0" + s;}
    document.getElementById(setElement).innerHTML = h+" : "+m+" : "+s;

  } 

  // Change to call onload.
  (function(){
    setInterval(() => { setDigitalTime('elementToChange') },500);
  })();
<div id="elementToChange"></div>
0 голосов
/ 20 декабря 2018
Дополнительные аргументы

setTimeout после первого и второго являются параметрами для вызова функции обратного вызова.Например, setTimeout((arg) => console.log(arg), 500, 'foo') напечатает foo через 500 мс.Таким образом, одним из вариантов будет использование параметра, переданного в setDigitalTime в качестве третьего параметра setTimeout:

function setDigitalTime(id){
  let today = new Date();
  let h = today.getHours();
  let m = today.getMinutes();
  let s = today.getSeconds();
  if(m < 10){m = "0" + m;}
  if(s < 10){s = "0" + s;}
  document.getElementById(id).innerHTML = h+" : "+m+" : "+s;
  setTimeout(setDigitalTime, 500, id);
} 

Вы можете использовать тот же шаблон для дополнительных аргументов - четвертый аргумент, переданный setTimeout представляет второй аргумент, с которым вызывается функция обратного вызова, и т. д.

Другим вариантом может быть анонимная встроенная функция, которая вызывает setDigitalTime(id):

function setDigitalTime(id){
  let today = new Date();
  let h = today.getHours();
  let m = today.getMinutes();
  let s = today.getSeconds();
  if(m < 10){m = "0" + m;}
  if(s < 10){s = "0" + s;}
  document.getElementById(id).innerHTML = h+" : "+m+" : "+s;
  setTimeout(() => setDigitalTime(id), 500);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...