在用户停止输入后,我试图在短时间延迟后调用一个函数,但是clearTimeout()似乎并没有像我想的那样做。下面是在一个角JS控制器内。
$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()问题的其他人,以下是一些类似的问题,它们可能解决您的问题(但没有解决我的问题):
发布于 2013-12-23 14:06:12
http://jsfiddle.net/coma/y52Q2/1/
控制器
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多
http://jsfiddle.net/coma/5hFjY/1/
https://stackoverflow.com/questions/20744935
复制相似问题