我试图在用户停止输入后短暂延迟后调用一个函数,但 clearTimeout()
似乎并没有按照我的想法进行。以下内容位于 Angular JS Controller 内。
$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()
问题的其他人,这里有一些类似的问题可能会解决您的问题(但没有解决我的问题):
最佳答案
http://jsfiddle.net/coma/y52Q2/1/
Controller
app.controller('Main', function ($scope) {
var delay;
var lookup = function() {
console.log($scope.input);
};
$scope.lookup = function() {
clearTimeout(delay);
delay = setTimeout(lookup, 1000);
};
});
查看
<div ng-controller="Main">
<input ng-model="input" ng-change="lookup()"/>
</div>
向上/向下尝试的问题在于 stopTyping
比 startTyping
被调用的次数更多:
关于Javascript:无法清除超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20744935/