Angular: Empty Fiddle
http://angularjs.org/
HTML
<script src="http://code.angularjs.org/angular-1.0.1.js"></script>
<div ng-controller="MyCtrl">
Hello, {{name}}!
<div auto-focus>
<input name="test" value="test" id="test"/>
<input name="test" disabled="true" />
<textarea name="test" value="test" ></textarea>
<input name="test" value="test" />
</div>
</div>
CSS
#test {visibility: hidden}
JavaScript
var myApp = angular.module('myApp', []);
//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});
function MyCtrl($scope) {
$scope.name = 'Superhero';
}
myApp.directive('autoFocus', autoFocus);
autoFocus.$inject = ['$timeout'];
function autoFocus($timeout) {
function link($scope, $element, $attrs) {
var doms = $element[0].querySelectorAll('input:not(:disabled), textarea:not(:disabled)');
var found = null;
angular.forEach(doms, function(dom) {
if (!isHidden(dom) && found === null) found = dom;
});
if ($attrs.autoFocus) {
$scope.$watch($attrs.autoFocus, focus);
} else {
focus(true);
}
function focus(condition) {
if (condition) {
$timeout(function() {
found.focus();
}, $scope.$eval($attrs.focusDelay) || 0);
}
}
function isHidden(el) {
var style = window.getComputedStyle(el);
if (style.visibility == 'hidden') return true;
return (el.offsetParent === null)
}
}
return {
restrict: 'A',
link: link
};
}