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.