Angular es compatible con esto fuera de la caja. ¿Has probado ngSubmit en tu elemento de formulario?
<form ng-submit="myFunc()" ng-controller="mycontroller">
<input type="text" ng-model="name" />
<br />
<input type="text" ng-model="email" />
</form>
EDITAR: según el comentario sobre el botón de envío, vea Enviar un formulario presionando enter sin un botón de envío que da la solución de:
<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"/>
Si no le gusta la solución de botón de envío oculto, deberá vincular una función de controlador al evento de pulsación de tecla Enter o keyup. Esto normalmente requiere una directiva personalizada, pero la biblioteca AngularUI ya tiene una buena solución de pulsación de teclas configurada. Ver http://angular-ui.github.com/
Después de agregar la biblioteca angularUI, su código sería algo así como:
<form ui-keypress="{13:'myFunc($event)'}">
... input fields ...
</form>
o puede vincular la pulsación de tecla enter a cada campo individual.
Además, vea estas preguntas SO para crear una directiva simple de keypres:
¿Cómo puedo detectar onKeyUp en AngularJS?
EDITAR (2014-08-28): en el momento en que se escribió esta respuesta, ng-keypress / ng-keyup / ng-keydown no existía como directivas nativas en AngularJS. En los comentarios a continuación, @ darlan-alves tiene una solución bastante buena con:
<input ng-keyup="$event.keyCode == 13 && myFunc()"... />
ng-submit="join()"
un controlador de registro que tenía$scope.join = function() {...}
y cambiando el nombre de esa función para que elfoo()
envío del botón enter funcionara nuevamente.ng-keyup="$event.keyCode == 13 && myFunc()"
Realmente increíble :)Si desea llamar a la función sin formulario, puede usar mi directiva ngEnter:
Javascript :
HTML :
Presento otras directivas impresionantes en mi cuenta de Twitter y Gist .
fuente
keydown
ykeypress
sin una coma para delimitarlos significa que ambos pueden dispararse simultáneamente. Es probable que esto genere $ rootScope: errores inprog. Agregar una coma entre ellos crea un disyuntivo y garantiza que solo se produzca el ciclo $ digest. No se pudo aplicar la edición, ya que solo se trata de un único carácter.Si solo tiene una entrada, puede usar la etiqueta de formulario.
Si tiene más de una entrada, o no desea usar la etiqueta del formulario, o si desea adjuntar la funcionalidad de la tecla Intro a un campo específico, puede incorporarlo a una entrada específica de la siguiente manera:
fuente
Quería algo un poco más extensible / semántico que las respuestas dadas, así que escribí una directiva que toma un objeto javascript de manera similar al incorporado
ngClass
:HTML
Los valores del objeto se evalúan en el contexto del alcance de la directiva; asegúrese de que están encerrados entre comillas simples; de lo contrario, todas las funciones se ejecutarán cuando se cargue la directiva (!)
Así por ejemplo:
esc : 'clear()'
lugar deesc : clear()
Javascript
fuente
'vm.doTheThing("myVar")'
Otro enfoque sería usar ng-keypress,
Envíe una entrada al presionar Enter con AngularJS - jsfiddle
fuente
Muy buena, limpia y simple directiva con shift + enter support:
fuente
Si quieres validación de datos también
La adición importante aquí es la
$loginForm.$valid
que validará el formulario antes de ejecutar la función. Tendrá que agregar otros atributos para la validación que está más allá del alcance de esta pregunta.Buena suerte.
fuente
Solo quería señalar que en el caso de tener un botón de envío oculto, puede usar la directiva ngShow y configurarla como falsa de esta manera:
HTML
fuente
<button ng-show="false"></button>
es aún más corto. No es necesario establecer el valor de un botón invisible.type="submit"
... supongo que el valor podría ignorarse, pero creo que lo primero es necesario.Use ng-submit y simplemente ajuste ambas entradas en etiquetas de formulario separadas:
Ajustar cada campo de entrada en su propia etiqueta de formulario permite que ENTER invoque el envío en cualquiera de los formularios. Si usa una etiqueta de formulario para ambos, deberá incluir un botón de envío.
fuente
Será un poco más ordenado usando una clase CSS en lugar de repetir estilos en línea.
CSS
HTML
fuente
FWIW: aquí hay una directiva que he usado para un modo de arranque básico de confirmación / alerta, sin la necesidad de un
<form>
(solo cambie la acción de clic de jQuery para lo que quiera y agréguelo
data-easy-dismiss
a su etiqueta modal)fuente