Несколько указателей:
1) Поскольку вы пытаетесь получить доступ к элементу dom, лучше проверить, присутствует ли этот элемент в DOM.
Поскольку вы уже используете jQuery, желательно иметь весь этот код внутри
$(document).ready()
.
2) clearTimeout
удаляет ссылку t
в этом случае из памяти, и любая последующая ссылка на нее приведет к непредсказуемым результатам. Переменная t
фактически используется в случае, если вы хотите очистить timeout
от элемента в какой-то момент.
3) Передача значения timedCount()
в строковой форме означает, что JS придется применить eval, чтобы получить его значение, которое в данном случае относится к функции. http://www.jslint.org. Стандарты JS просят избегать использования eval. Здесь лучше использовать анонимную функцию, которая в свою очередь вызывает нужную функцию timedCount()
.
4) Что касается другой реализации, то это действительно зависит от того, как и когда вы хотите, чтобы ваша stopCount()
функция вызывалась. В вашей реализации он фактически никогда не будет вызываться, поскольку он продолжает вызывать одну и ту же функцию после промежутка в 1 секунду.
желаемый код может быть что-то вроде
function timedCount()
{
// the first 2 lines doing something
t = setTimeout(function()
{
// if clear time out logic
if ( can_clear_timeout() )
{
stopCount();
}
else
{
return timedCount();
}
}, 1000);
}
5) Еще одно предупреждение: нельзя использовать глобальные переменные, такие как timer_is_on
, поскольку это противоречит стандартам.