首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:无法clearTimeout

Javascript:无法clearTimeout
EN

Stack Overflow用户
提问于 2013-12-23 13:50:55
回答 1查看 4K关注 0票数 4

在用户停止输入后,我试图在短时间延迟后调用一个函数,但是clearTimeout()似乎并没有像我想的那样做。下面是在一个角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()问题的其他人,以下是一些类似的问题,它们可能解决您的问题(但没有解决我的问题):

clearTimeout not working

clearTimeout() not working

clearTimeout is not working

clearTimeout not working

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-23 14:06:12

http://jsfiddle.net/coma/y52Q2/1/

控制器

代码语言:javascript
复制
app.controller('Main', function ($scope) {

    var delay;

    var lookup = function() {

        console.log($scope.input);
    };

    $scope.lookup = function() {

        clearTimeout(delay);
        delay = setTimeout(lookup, 1000);
    };
});

视图

代码语言:javascript
复制
<div ng-controller="Main">
    <input ng-model="input" ng-change="lookup()"/>
</div>

向上/向下调度的问题是,stopTyping被调用的次数比startTyping

http://jsfiddle.net/coma/5hFjY/1/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20744935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档