-
-
Save mlynch/dd407b93ed288d499778 to your computer and use it in GitHub Desktop.
/** | |
* the HTML5 autofocus property can be finicky when it comes to dynamically loaded | |
* templates and such with AngularJS. Use this simple directive to | |
* tame this beast once and for all. | |
* | |
* Usage: | |
* <input type="text" autofocus> | |
* | |
* License: MIT | |
*/ | |
angular.module('utils.autofocus', []) | |
.directive('autofocus', ['$timeout', function($timeout) { | |
return { | |
restrict: 'A', | |
link : function($scope, $element) { | |
$timeout(function() { | |
$element[0].focus(); | |
}); | |
} | |
} | |
}]); |
Hey ... just found this after writing my own solution ...
angular.module('finnApp')
.directive('angularAutoFocus', function () {
return {
restrict: 'A',
link: function (scope, element, attrs) {
element.focus();
}
};
});
any chance you can explain why you are using element[0]
... instead of just element
. Also reasoning for the $timeout
.. would prefer to not have it if it is not necessary.
for context I have only tired this on inputs while using uirouter and running into wonkyness with html5 autofocus
@BenjaminConant: .focus()
(without [0]
) only works when you have jQuery loaded. The $timeout
is required because at execution time, the element may not be present in the DOM yet.
thanks 👍
@blaise-io thanks much!
Great, thank you
This directive was working great with an earlier version of Angular 1.4, but I recently upgraded to Angular 1.4.10, and started getting this error: Uncaught TypeError: $exceptionHandler is not a function
. The solution was to inject $exceptionHandler
in addition to $timeout
into the directive. I believe this is because $timeout
delegates any exceptions that occur within the function to the $exceptionHandler
.
Like a boss!
awesome
The $timeout
to the rescue!!!
awesome
Thanks!
wonderful, thank you sir
how to add autofocus conditionally? so if expression is true add "autofocus" attribute.
It's MIT Licensed