ngGridDirectives.directive('ngCellHasFocus', ['$domUtilityService', function (domUtilityService) { var focusOnInputElement = function($scope, elm){ $scope.isFocused = true; domUtilityService.digest($scope); var elementWithoutComments = angular.element(elm[0].children).filter(function () { return this.nodeType != 8; });//Remove html comments for IE8 var inputElement = angular.element(elementWithoutComments[0].children[0]); if(inputElement.length > 0){ angular.element(inputElement).focus(); $scope.domAccessProvider.selectInputElement(inputElement[0]); angular.element(inputElement).bind('blur', function(){ $scope.isFocused = false; domUtilityService.digest($scope); return true; }); } }; return function($scope, elm) { var isFocused = false; $scope.editCell = function(){ setTimeout(function() { focusOnInputElement($scope,elm); }, 0); }; elm.bind('mousedown', function(){ elm.focus(); return true; }); elm.bind('focus', function(){ isFocused = true; return true; }); elm.bind('blur', function(){ isFocused = false; return true; }); elm.bind('keydown', function(evt){ if(isFocused && evt.keyCode != 37 && evt.keyCode != 38 && evt.keyCode != 39 && evt.keyCode != 40 && evt.keyCode != 9 && !evt.shiftKey && evt.keyCode != 13){ focusOnInputElement($scope,elm); } if(evt.keyCode == 27){ elm.focus(); } return true; }); }; }]);