为什么dblclick处理程序不取消单击处理程序?

时间:2013-07-15 14:30:49

标签: javascript angularjs

JS

angular.module('my-app', []).controller('Ctrl', function ($scope, $timeout) {
    var t;

    $scope.click = function () {
        t = $timeout(function () {
            alert('click');
        }, 1000);
    };

    $scope.dblclick = function () {
        $timeout.cancel(t);
        alert('dblclick');
    };

});

模板

<div ng-app='my-app' ng-controller='Ctrl'>
    <button ng-click='click()' ng-dblclick='dblclick()'>push</button>
</div>

的jsfiddle

http://jsfiddle.net/Q6CXW/

1 个答案:

答案 0 :(得分:6)

有趣的是,所以当你双击时,你只需要调用超时取消一次,但是在创建两个定时器之前计数两次点击。你只取消了一个。

这是一个固定的小提琴:

http://jsfiddle.net/Q6CXW/1/

修改后的JS:

angular.module('my-app', [])
.controller('Ctrl', function ($scope, $timeout) {
    var t=[];

    $scope.click = function () {
        t.push($timeout(function () {
            alert('click');
        }, 1000));
    };

    $scope.dblclick = function () {
        for(var i=0;i<t.length;i++)
        {
            $timeout.cancel(t[i]);
        }
        t=[];
        alert('dblclick');
    };

});