angular2 invia il modulo premendo invio senza il pulsante di invio


100

È possibile inviare un modulo che non ha il pulsante di invio (premendo invio) esempio:

<form [ngFormModel]="xxx" (ngSubmit)="xxxx()">
  <input [(ngModel)]="lxxR"   ngControl="xxxxx"/>
</form

Risposte:


77

magari aggiungi keypresso keydownai campi di input e assegni l'evento alla funzione che farà l'invio quando si fa clic su Invio

il tuo modello sarebbe simile a questo

<form (keydown)="keyDownFunction($event)">
  <input type="text" />
</form

E tu funzioni all'interno della tua classe sarebbe simile a questo

keyDownFunction(event) {
  if (event.keyCode === 13) {
    alert('you just pressed the enter key');
    // rest of your code
  }
}

206

Puoi anche aggiungere (keyup.enter)="xxxx()"


Funziona alla grande se hai solo una semplice vecchia funzione che desideri chiamare invece di un gestore di invio
Scott R. Frost

3
Questo approccio è stato menzionato nei documenti Angular. angular.io/docs/ts/latest/guide/…
trungk18

Questo è l'unico modo in cui funziona nella mia situazione, grazie!
switch87

5
Questa dovrebbe essere la risposta accettata. L'eleganza solo nel modo in cui Angular può ottenere. Brillante.
Scott Byers

Nuova menzione nella documentazione Angular: angular.io/guide/user-input#key-event-filtering-with-keyenter
Rafael Neto

84

Modificare:

  <form (submit)="submit()" >
    <input />
    <button type="submit" style="display:none">hidden submit</button>
  </form>

Per utilizzare questo metodo, è necessario disporre di un pulsante di invio anche se non viene visualizzato "Grazie per la risposta di Toolkit "

Vecchia risposta:

Sì, esattamente come l'hai scritto, tranne che il nome dell'evento è (submit)invece di (ngSubmit):

<form [ngFormModel]="xxx" (submit)="xxxx()">
  <input [(ngModel)]="lxxR"   ngControl="xxxxx"/>
</form>


2
puoi per favore fornire un plunker? perché non funziona
Toolkit

Usa "visibilità: nascosto;" anziché. Il "display: nessuno;" lavorato in cromo, ma non in safari.
Moulde

Questo dovrebbe essere usato, tranne per il fatto che il pulsante di invio non dovrebbe essere nascosto ma visibile perché alcune persone cercheranno quel pulsante e non si preoccuperanno di premere invio.
Impulse The Fox

31

Preferisco (keydown.enter)="mySubmit()"perché non verrà aggiunta un'interruzione di riga se il cursore si trova da qualche parte all'interno di un <textarea>ma non alla sua fine.


1
Questa dovrebbe essere la soluzione accettata - molto più pulita
rhysclay

27

In questo modo è molto semplice ...

<form [formGroup]="form" (keyup.enter)="yourMethod(form.value)">

</form>

2
Grazie, è più facile quando me lo aspettavo. Risolto in questo modo: <input type = "text" class = "form-control" [(ngModel)] = "object.LanguageTableData" (blur) = "mymethod ()" (keyup.enter) = "mymethod ()" / >
Loutocký

1
molto più facile in questo modo piuttosto che inviare una funzione con $ event. Grazie!
Helen

1
molto meglio. nessun pulsante nascosto o js. Pure
angular

10

Usa sempre keydown.enter invece di keyup.enter per evitare ritardi.

<textarea [(ngModel)]="textValue" (keydown.enter)="sendMessage();false" ></textarea>

e funzione all'interno di component.ts

 textValue : string = '';  
 sendMessage() {
    console.log(this.textValue);
    this.textValue = '';
  }

10

aggiungilo all'interno del tag di input

<input type="text" (keyup.enter)="yourMethod()" />

grazie fratello. Preferisco questa opzione alla risposta selezionata.
Santosh

8
(keyup.enter)="methodname()"

questo dovrebbe funzionare e già menzionato in molte risposte, tuttavia dovrebbe essere presente sul tag del modulo e non sul pulsante.


7

l'aggiunta di un pulsante di invio invisibile fa il trucco

<input type="submit" style="display: none;">


Usa "visibilità: nascosto;" anziché. Quanto sopra ha lavorato in cromo, ma non in safari.
Moulde


4

Spero che questo possa aiutare qualcuno: per qualche motivo non sono riuscito a rintracciarlo per mancanza di tempo, se hai un modulo come:

<form (ngSubmit)="doSubmit($event)">
  <button (click)="clearForm()">Clear</button>
  <button type="submit">Submit</button>
</form>

quando si Enterpreme il pulsante, la clearFormfunzione viene chiamata, anche se il comportamento previsto era chiamare la doSubmitfunzione. La modifica del Clearpulsante in un <a>tag ha risolto il problema per me. Vorrei ancora sapere se è previsto o no. Mi sembra confuso


8
per evitare ciò, devi specificare type = "button" per il pulsante Clear
radio_head

2

Se vuoi includere entrambi più semplici di quello che ho visto qui, puoi farlo semplicemente includendo il tuo pulsante all'interno del modulo.

Esempio con una funzione che invia un messaggio:

                <form>
                    <mat-form-field> <!-- In my case I'm using material design -->
                        <input matInput #message maxlength="256" placeholder="Message">
                    </mat-form-field>
                    <button (click)="addMessage(message.value)">Send message
                    </button>
                </form>

È possibile scegliere tra fare clic sul pulsante o premere il tasto Invio.


1

Se vuoi includere entrambi - accetta su invio e accetta al clic, quindi fai -

 <div class="form-group">
    <input class="form-control"   type="text" 
    name="search" placeholder="Enter Search Text"
              [(ngModel)]="filterdata"  
           (keyup.enter)="searchByText(filterdata)">
  <button type="submit"  
          (click)="searchByText(filterdata)" >

  </div>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.