我试图在用户停止输入后的短暂延迟后调用某个函数,但clearTimeout()
似乎没有按照我的想法进行操作。以下是Angular JS控制器内部。Javascript:无法清除超时
$scope.typing = false;
$scope.delay = undefined;
//Triggered by ng-keydown...
$scope.startTyping = function() {
$scope.typing = true;
console.log('start1', $scope.delay); //6
clearTimeout($scope.delay);
console.log('start2', $scope.delay); //6... NOT getting cleared!
}
//Triggered by ng-keyup...
$scope.stopTyping = function() {
$scope.typing = false;
$scope.delay = setTimeout($scope.lookup, 1000);
}
$scope.lookup = function() {
if ($scope.typing === true){
return false;
}
console.log('lookup'); //This fires after every key!
我看到在日志中lookup
每一个关键,而不是每延迟之后。为什么是这样?
更新
记录的delay
值之后显然clearTimeout()
没有正在重置计时器,并代替,多个定时器越来越集和每一个被触发的查找功能。
仅供参考...
对于别人的故障排除clearTimeout()
,这里是可以解决你的问题(但并没有解决我的)一些类似的问题:
它是 “lookupJobs” 或只是 “查找”? – Pointy
你能告诉我们如何定义'$ scope.lookupJobs'吗?此外,这行看起来很奇怪:'$ scope.delay;'。这不是一个有效的命令,要么删除它,要么像'$ scope.delay = undefined;' –
''keydown'事件发生在'keyup'事件之后。而你想'cleatTimeout'是一个未定义的变量。 – Praveen