Я думаю, что большинство людей понимают причину, по которой это не работает, но я подумал, что предоставлю вам обновленный код. Он почти такой же, как и ваш, за исключением того, что он назначает время ожидания переменной, чтобы его можно было очистить.
Кроме того, анонимная функция в setTimeout великолепна, , если вы хотите запустить встроенную логику, изменить значение 'this' внутри функции или передать параметры в функцию . Если вы просто хотите вызвать функцию, достаточно передать имя функции в качестве первого параметра.
var timer = null;
var updatetimer = function () {
//do stuff
// By the way, can just pass in the function name instead of an anonymous
// function unless if you want to pass parameters or change the value of 'this'
timer = setTimeout(updatetimer, 10000);
};
//this should start and stop the timer
$("#mybutton").click(function(e) {
e.preventDefault();
if($('#mydiv').is(':visible')){
$('#mydiv').fadeOut('normal');
clearTimeout(timer); // Since the timeout is assigned to a variable, we can successfully clear it now
} else{
$('#mydiv').fadeIn('normal');
updatetimer();
}
});