Javascript 为什么';dblclick处理程序是否取消单击处理程序?

Javascript 为什么';dblclick处理程序是否取消单击处理程序?,javascript,angularjs,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 () {

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

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

很有趣,所以当你双击时,你只调用了一次timeout's cancel,但是在那之前的两次点击数会产生两个计时器。你只取消了一个

这里有一把固定的小提琴:

以及修改后的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');
    };

});
angular.module('my-app',[])
.controller('Ctrl',函数($scope,$timeout){
var t=[];
$scope.click=函数(){
t、 推送($超时(函数(){
警报(“点击”);
}, 1000));
};
$scope.dblclick=函数(){

对于(var i=0;i有趣,所以当您双击时,您只调用了timeout的cancel一次,但在此之前的两次单击计数em创建了两个计时器。您只取消了一个

这里有一把固定的小提琴:

以及修改后的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');
    };

});
angular.module('my-app',[])
.controller('Ctrl',函数($scope,$timeout){
var t=[];
$scope.click=函数(){
t、 推送($超时(函数(){
警报(“点击”);
}, 1000));
};
$scope.dblclick=函数(){

对于(var i=0;iAha),第二次单击也会再次触发单击事件。这是一个好问题。谢谢你的回答。@Pickels没问题,是的,我不会注意到,但我确实注意到了console.log(t);在两个函数中,我都看到了高飞正在进行的操作。啊哈,第二次单击也会再次触发“单击”事件。这是一些问题。谢谢你的回答。@Pickels没问题,是的,我不会注意到,但我在两个函数中都看到了console.log(t);然后我看到高飞正在进行的操作。