0

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>

Jsフィドル

http://jsfiddle.net/Q6CXW/

4

1 に答える 1

6

興味深いことに、ダブルクリックすると、タイムアウトのキャンセルが 1 回だけ呼び出されますが、その前に 2 回クリックすると、2 つのタイマーが作成されます。キャンセルしたのは 1 つだけです。

ここに固定フィドルがあります:

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');
    };

});
于 2013-07-15T14:40:50.427 に答える