Quiero enviar el formulario tan pronto como presione Intro en el área de texto, esto funcionó bien con el tipo de texto de entrada, pero no sé cómo hacerlo con el área de texto. Tengo que usar el área de texto porque quiero que la entrada de texto sea expandible, ¿cómo puedo hacer que funcione? Gracias
<div ng-app="myApp" ng-controller="myCtrl"> <form ng-submit="sendMessage(newMessageContent)"> First Name: <input type="text" ng-model="firstName"><br> Last Name: <input type="text" ng-model="lastName"><br> <br> Full Name: {{firstName + " " + lastName}} <textarea id="typeMessageBox" placeholder="Write here and hit enter to send..." type="text submit" class="form-control-lg form-control" ng-model="newMessageContent"></textarea> </form> </div>Puede usar el siguiente código jQuery para enviar su formulario al presionar Enter en su área de texto:
$("#typeMessageBox").keypress(function (e) { if (e.which === 13 && !e.shiftKey) { e.preventDefault(); $(this).closest("form").submit(); } });Dicho esto, puede que no sea una buena idea. Si desea un campo expandible, seguramente se deba a que tendrá varias líneas de texto, por lo tanto, es casi seguro que habrá un salto de línea.
Le recomiendo encarecidamente que agregue un texto de ayuda que indique que ENVIARÁ el formulario al ingresar Intro , ya que sus usuarios se sorprenderían mucho con este comportamiento.
Aún mejor: no intente cambiar los comportamientos nativos. Un área de texto funciona así por una buena razón, y todo el mundo está acostumbrado. Cambiar su comportamiento puede parecerte una buena idea, pero probablemente perderás a tus usuarios.
Puede usar ng-keypress y luego verificar si la pulsación de tecla es igual, ingresar y luego llamar para enviar la función de formulario
En su área de texto debe ser
<textarea ng-keypress="getkeys($event)" ng-model="newMessageContent"></textarea>Entonces tu código angular debería ser
$scope.getkeys = function (event) { if(event.keyCode == 13){ $scope.sendMessage( $scope.newMessageContent ); } }