Submit form on pressing Enter with AngularJS Submit form on pressing Enter with AngularJS angularjs angularjs

Submit form on pressing Enter with AngularJS


Angular supports this out of the box. Have you tried ngSubmit on your form element?

<form ng-submit="myFunc()" ng-controller="mycontroller">   <input type="text" ng-model="name" />    <br />    <input type="text" ng-model="email" /></form>

EDIT: Per the comment regarding the submit button, see Submitting a form by pressing enter without a submit button which gives the solution of:

<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"/>

If you don't like the hidden submit button solution, you'll need to bind a controller function to the Enter keypress or keyup event. This normally requires a custom directive, but the AngularUI library has a nice keypress solution set up already. See http://angular-ui.github.com/

After adding the angularUI lib, your code would be something like:

<form ui-keypress="{13:'myFunc($event)'}">  ... input fields ...</form>

or you can bind the enter keypress to each individual field.

Also, see this SO questions for creating a simple keypres directive:How can I detect onKeyUp in AngularJS?

EDIT (2014-08-28): At the time this answer was written, ng-keypress/ng-keyup/ng-keydown did not exist as native directives in AngularJS. In the comments below @darlan-alves has a pretty good solution with:

<input ng-keyup="$event.keyCode == 13 && myFunc()"... />


If you want to call function without form you can use my ngEnter directive:

Javascript:

angular.module('yourModuleName').directive('ngEnter', function() {        return function(scope, element, attrs) {            element.bind("keydown keypress", function(event) {                if(event.which === 13) {                    scope.$apply(function(){                        scope.$eval(attrs.ngEnter, {'event': event});                    });                    event.preventDefault();                }            });        };    });

HTML:

<div ng-app="" ng-controller="MainCtrl">    <input type="text" ng-enter="doSomething()">    </div>

I submit others awesome directives on my twitter and my gist account.


If you only have one input you can use the form tag.

<form ng-submit="myFunc()" ...>

If you have more than one input, or don't want to use the form tag, or want to attach the enter-key functionality to a specific field, you can inline it to a specific input as follows:

<input ng-keyup="$event.keyCode == 13 && myFunc()" ...>