2013-07-15 49 views
0

JSdblclick處理程序爲什麼不取消點擊處理程序?

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/

回答

6

有趣的,所以當你雙擊你CAL ling超時取消一次,但在兩次點擊之前創建了兩個定時器。你只取消了一個。

這裏有一個固定的小提琴:

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

}); 
+0

啊哈,第二次點擊也再次閃光click事件。這是一些陷阱。感謝你的回答。 – Pickels

+0

@皮卡沒問題,是的,我不會注意到,但我做了console.log(t);在這兩個職能,然後看到一些愚蠢的事情正在進行。 – shaunhusain