From 754b87324cca2822608389c05b7da1d154f10b00 Mon Sep 17 00:00:00 2001 From: harryfeng Date: Mon, 15 May 2017 14:35:17 -0400 Subject: [PATCH 1/3] fixed when child element used ng-hide ng-show --- angular-deep-blur.js | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/angular-deep-blur.js b/angular-deep-blur.js index 76dc85f..362e115 100644 --- a/angular-deep-blur.js +++ b/angular-deep-blur.js @@ -1,6 +1,6 @@ -(function (root, factory) { +(function(root, factory) { if (typeof define === 'function' && define.amd) { - define([ 'module', 'angular' ], function (module, angular) { + define(['module', 'angular'], function(module, angular) { module.exports = factory(angular); }); } else if (typeof module === 'object') { @@ -12,7 +12,7 @@ root.mp.deepBlur = factory(root.angular); } -}(this, function (angular) { +}(this, function(angular) { 'use strict'; function containsDom(parent, dom) { @@ -29,10 +29,11 @@ return angular.module('mp.deepBlur', []) // child links must use tabindex=0 to capture focus in Webkit and avoiding triggering blur - .directive('deepBlur', [ '$timeout', function ($timeout) { + .directive('deepBlur', ['$timeout', function($timeout) { return { restrict: 'A', - controller: [ '$scope', '$element', '$attrs', function ($scope, $element, $attrs) { + controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) { + var isClickingChild = false; var leaveExpr = $attrs.deepBlur, dom = $element[0]; @@ -42,19 +43,31 @@ var targetElement = e.relatedTarget || document.activeElement; if (!containsDom(dom, targetElement)) { - $timeout(function () { - $scope.$apply(leaveExpr); + $timeout(function() { + if (!isClickingChild) { + $scope.$apply(leaveExpr); + } + isClickingChild = false; }, 10); } } + function onClick() { + //debugger + isClickingChild = true; + $timeout(function() { + isClickingChild = false; + }, 200); + } + if (dom.addEventListener) { dom.addEventListener('blur', onBlur, true); + dom.addEventListener('click', onClick, true); } else { dom.attachEvent('onfocusout', onBlur); // For IE8 } - } ] + }] }; - } ]) - .name; // pass back as dependency name -})); + }]) + .name; // pass back as dependency name +})); \ No newline at end of file From bbd6ee18c3be42beb3a5c78298f8aaac932606d7 Mon Sep 17 00:00:00 2001 From: harryfeng Date: Mon, 15 May 2017 14:36:32 -0400 Subject: [PATCH 2/3] fixed when child element used ng-hide ng-show --- angular-deep-blur.js | 72 ++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/angular-deep-blur.js b/angular-deep-blur.js index 362e115..0183f34 100644 --- a/angular-deep-blur.js +++ b/angular-deep-blur.js @@ -1,6 +1,6 @@ -(function(root, factory) { +(function (root, factory) { if (typeof define === 'function' && define.amd) { - define(['module', 'angular'], function(module, angular) { + define([ 'module', 'angular' ], function (module, angular) { module.exports = factory(angular); }); } else if (typeof module === 'object') { @@ -12,7 +12,7 @@ root.mp.deepBlur = factory(root.angular); } -}(this, function(angular) { +}(this, function (angular) { 'use strict'; function containsDom(parent, dom) { @@ -29,45 +29,45 @@ return angular.module('mp.deepBlur', []) // child links must use tabindex=0 to capture focus in Webkit and avoiding triggering blur - .directive('deepBlur', ['$timeout', function($timeout) { + .directive('deepBlur', [ '$timeout', function ($timeout) { return { restrict: 'A', controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) { - var isClickingChild = false; - var leaveExpr = $attrs.deepBlur, - dom = $element[0]; + var isClickingChild = false; + var leaveExpr = $attrs.deepBlur, + dom = $element[0]; - function onBlur(e) { - // e.relatedTarget for Chrome - // document.activeElement for IE 11 - var targetElement = e.relatedTarget || document.activeElement; + function onBlur(e) { + // e.relatedTarget for Chrome + // document.activeElement for IE 11 + var targetElement = e.relatedTarget || document.activeElement; - if (!containsDom(dom, targetElement)) { - $timeout(function() { - if (!isClickingChild) { - $scope.$apply(leaveExpr); - } - isClickingChild = false; - }, 10); + if (!containsDom(dom, targetElement)) { + $timeout(function() { + if (!isClickingChild) { + $scope.$apply(leaveExpr); } - } + isClickingChild = false; + }, 10); + } + } - function onClick() { - //debugger - isClickingChild = true; - $timeout(function() { - isClickingChild = false; - }, 200); - } + function onClick() { + //debugger + isClickingChild = true; + $timeout(function() { + isClickingChild = false; + }, 200); + } - if (dom.addEventListener) { - dom.addEventListener('blur', onBlur, true); - dom.addEventListener('click', onClick, true); - } else { - dom.attachEvent('onfocusout', onBlur); // For IE8 - } - }] + if (dom.addEventListener) { + dom.addEventListener('blur', onBlur, true); + dom.addEventListener('click', onClick, true); + } else { + dom.attachEvent('onfocusout', onBlur); // For IE8 + } + }] }; - }]) - .name; // pass back as dependency name -})); \ No newline at end of file + } ]) + .name; // pass back as dependency name +})); From 79244eac02ebf13eb1a8103ab64a8847c2081c1b Mon Sep 17 00:00:00 2001 From: harryfeng Date: Mon, 15 May 2017 14:37:44 -0400 Subject: [PATCH 3/3] fixed when child element used ng-hide ng-show --- angular-deep-blur.js | 56 ++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/angular-deep-blur.js b/angular-deep-blur.js index 0183f34..1559bdf 100644 --- a/angular-deep-blur.js +++ b/angular-deep-blur.js @@ -33,39 +33,39 @@ return { restrict: 'A', controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) { - var isClickingChild = false; - var leaveExpr = $attrs.deepBlur, - dom = $element[0]; + var isClickingChild = false; + var leaveExpr = $attrs.deepBlur, + dom = $element[0]; - function onBlur(e) { - // e.relatedTarget for Chrome - // document.activeElement for IE 11 - var targetElement = e.relatedTarget || document.activeElement; + function onBlur(e) { + // e.relatedTarget for Chrome + // document.activeElement for IE 11 + var targetElement = e.relatedTarget || document.activeElement; - if (!containsDom(dom, targetElement)) { - $timeout(function() { - if (!isClickingChild) { - $scope.$apply(leaveExpr); + if (!containsDom(dom, targetElement)) { + $timeout(function() { + if (!isClickingChild) { + $scope.$apply(leaveExpr); + } + isClickingChild = false; + }, 10); } - isClickingChild = false; - }, 10); - } - } + } - function onClick() { - //debugger - isClickingChild = true; - $timeout(function() { - isClickingChild = false; - }, 200); - } + function onClick() { + //debugger + isClickingChild = true; + $timeout(function() { + isClickingChild = false; + }, 200); + } - if (dom.addEventListener) { - dom.addEventListener('blur', onBlur, true); - dom.addEventListener('click', onClick, true); - } else { - dom.attachEvent('onfocusout', onBlur); // For IE8 - } + if (dom.addEventListener) { + dom.addEventListener('blur', onBlur, true); + dom.addEventListener('click', onClick, true); + } else { + dom.attachEvent('onfocusout', onBlur); // For IE8 + } }] }; } ])