var app = angular.module('app', []); app.controller('Ctrl', function ($scope) { //array of edited fields (optional) $scope.focusField1 = false; $scope.focusField2 = false; //handle method for field1 blur $scope.doneEditing1 = function () { $scope.countedValue = 'Blur from field1: ' + $scope.value1 + ' * ' + $scope.value2 + ' = ' + $scope.value1 * $scope.value2; } //handle method for field2 blur $scope.doneEditing2 = function () { $scope.countedValue = 'Blur from field2: ' + $scope.value2 + ' * ' + $scope.value1 + ' = ' + $scope.value1 * $scope.value2; } $scope.value1 = 1; $scope.value2 = 2; $scope.countedValue = 'After blur on field change to field1 * field2'; }); //focus directive app.directive('myFocus', function () { return { restrict: 'A', link: function (scope, element, attr) { scope.$watch(attr.myFocus, function (n, o) { if (n != 0 && n) { element[0].focus(); } }); } }; }); //blur directive app.directive('myBlur', function () { return { restrict: 'A', link: function (scope, element, attr) { element.bind('blur', function () { //apply scope (attributes) scope.$apply(attr.myBlur); //return scope value for focusing to false scope.$eval(attr.myFocus + '=false'); }); } }; });