Доброго времени суток. К делу. При запуске функции setTime,в нее передаем input, куда выводиться время. вопрос. при повторном вызове через таймер, obj не определяется. и даже если inputs через var определить не работает. только таким образом. вот. код
var id_inter;
var go = true;
function setTime(obj) {
data = new Date()
hours = data.getHours();
mins = data.getMinutes();
secs = data.getSeconds();
if (hours < 10) {
hours = "0" + hours;
}
if (mins < 10) {
mins = "0" + mins;
}
if (secs < 10) {
secs = "0" + secs;
}
time = hours + ":" + mins + ":" + secs;
obj.value = " " + time;
id_inter = setTimeout('setTime(obj)', 1000);
}
function stopTime(obj) {
clearTimeout(id_inter);
obj.value = "";
}
function times(input_form) {
if (go) {
setTime(input_form);
go = false;
document.data.start.value = "Стоп";
} else {
stopTime(input_form);
go = true;
document.data.start.value = "Старт";
}
}
Если писать вместо
obj.value = " " + time;
id_inter = setTimeout('setTime(obj)', 1000);
так:
inputs = obj;
id_inter = setTimeout('setTime(inputs)', 1000);
то всё работает.
Почему?
https://jsfiddle.net/jL3fhLd3/4/
Когда вы пишите setTimeout('setTime(obj)', 1000); - ваша setTime(obj) исполняется в глобальной области видимости, где нет никакого obj.
Когда вы пишите inputs = obj - вы создаете глобальную переменную, потому и setTimeout('setTime(inputs)', 1000); работает. Но в случае нескольких таймеров все поломается - потому что глобальная переменная только одна.
Правильно же передавать в setTimeout не строку - а функцию:
setTimeout(function() {
setTime(obj);
}, 1000);
Или более коротко если интересуют только свежие браузеры:
setTimeout(() => setTime(obj), 1000);
Также можно воспользоваться формой setTimeout с передачей дополнительных аргументов:
setTimeout(setTime, 1000, obj);
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники