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

Pic*_*els 0 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');
    };

});
Run Code Online (Sandbox Code Playgroud)

模板

<div ng-app='my-app' ng-controller='Ctrl'>
    <button ng-click='click()' ng-dblclick='dblclick()'>push</button>
</div>
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

http://jsfiddle.net/Q6CXW/

sha*_*ain 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');
    };

});
Run Code Online (Sandbox Code Playgroud)