aboutsummaryrefslogtreecommitdiffstats
path: root/src/ngTouch/directive/ngClick.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/ngTouch/directive/ngClick.js')
-rw-r--r--src/ngTouch/directive/ngClick.js16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/ngTouch/directive/ngClick.js b/src/ngTouch/directive/ngClick.js
index 6cd0ff76..7e558def 100644
--- a/src/ngTouch/directive/ngClick.js
+++ b/src/ngTouch/directive/ngClick.js
@@ -53,6 +53,7 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
var ACTIVE_CLASS_NAME = 'ng-click-active';
var lastPreventedTime;
var touchCoordinates;
+ var lastLabelClickCoordinates;
// TAP EVENTS AND GHOST CLICKS
@@ -124,10 +125,23 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
var y = touches[0].clientY;
// Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label
// and on the input element). Depending on the exact browser, this second click we don't want
- // to bust has either (0,0) or negative coordinates.
+ // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label
+ // click event
if (x < 1 && y < 1) {
return; // offscreen
}
+ if (lastLabelClickCoordinates &&
+ lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) {
+ return; // input click triggered by label click
+ }
+ // reset label click coordinates on first subsequent click
+ if (lastLabelClickCoordinates) {
+ lastLabelClickCoordinates = null;
+ }
+ // remember label click coordinates to prevent click busting of trigger click event on input
+ if (event.target.tagName.toLowerCase() === 'label') {
+ lastLabelClickCoordinates = [x, y];
+ }
// Look for an allowable region containing this click.
// If we find one, that means it was created by touchstart and not removed by