Angular2-Formular senden durch Drücken der Eingabetaste ohne Senden-Taste

99

Ist es möglich, ein Formular ohne Senden-Schaltfläche (durch Drücken der Eingabetaste) zu senden? Beispiel:

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

Antworten:

77

Vielleicht fügen Sie keypressoder keydownzu den Eingabefeldern hinzu und weisen das Ereignis der Funktion zu, die das Senden durch Klicken auf die Eingabetaste ausführt

Ihre Vorlage würde so aussehen

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

Und Sie funktionieren innerhalb Ihrer Klasse würde so aussehen

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

Sie können auch hinzufügen (keyup.enter)="xxxx()"

brutzeln
quelle
Dies funktioniert hervorragend, wenn Sie nur eine einfache alte Funktion haben, die Sie anstelle eines Submit-Handlers aufrufen möchten
Scott R. Frost
3
Dieser Ansatz wurde in Angular-Dokumenten erwähnt. angle.io/docs/ts/latest/guide/…
trungk18
Nur so funktioniert es in meiner Situation, danke!
Switch87
5
Dies sollte die akzeptierte Antwort sein. Eleganz nur so, wie Angular es erreichen kann. Brillant.
Scott Byers
Neue Erwähnung in der Angular-Dokumentation: angle.io/guide/user-input#key-event-filtering-with-keyenter
Rafael Neto
83

Bearbeiten:

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

Um diese Methode verwenden zu können, benötigen Sie eine Senden-Schaltfläche, auch wenn nicht "Danke für die Antwort von Toolkit " angezeigt wird.

Alte Antwort:

Ja, genau so, wie Sie es geschrieben haben, außer dass der Ereignisname (submit)anstelle von (ngSubmit):

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

Abdulrahman Alsoghayer
quelle
2
Können Sie bitte einen Plunker zur Verfügung stellen? weil es nicht funktioniert
Toolkit
Verwenden Sie "Sichtbarkeit: versteckt;" stattdessen. Die "Anzeige: keine;" arbeitete in Chrom, aber nicht in Safari.
Moulde
Dies sollte verwendet werden, außer dass die Senden-Schaltfläche nicht ausgeblendet, sondern sichtbar sein sollte, da einige Leute nach dieser Schaltfläche suchen und sich nicht die Mühe machen, die Eingabetaste zu drücken.
Impulse The Fox
31

Ich bevorzuge, (keydown.enter)="mySubmit()"weil kein Zeilenumbruch hinzugefügt wird, wenn sich der Cursor irgendwo innerhalb von a befindet, <textarea>aber nicht am Ende.

Martin Schneider
quelle
1
Dies sollte die akzeptierte Lösung sein - viel sauberer
Rhysclay
27

Dieser Weg ist sehr einfach ...

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

</form>
Clayton KN Passos
quelle
2
Danke, es ist einfacher, als ich erwartet hatte. So gelöst: <input type = "text" class = "form-control" [(ngModel)] = "object.LanguageTableData" (blur) = "mymethod ()" (keyup.enter) = "mymethod ()" / >
Loutocký
1
Auf diese Weise viel einfacher, als eine Funktion mit $ event zu senden. Danke dir!
Helen
1
viel besser. keine versteckten Tasten oder js. Reiner eckiger Weg
RenanSS
10

Verwenden Sie immer keydown.enter anstelle von keyup.enter, um Verzögerungen zu vermeiden.

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

und Funktion innerhalb der Komponente.ts

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

Fügen Sie dies in Ihr Eingabe-Tag ein

<input type="text" (keyup.enter)="yourMethod()" />
Abdus Salam Azad
quelle
Danke Bruder. Ich bevorzuge diese Option gegenüber der ausgewählten Antwort.
Santosh
7

Das Hinzufügen einer unsichtbaren Schaltfläche zum Senden reicht aus

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

Toolkit
quelle
Verwenden Sie "Sichtbarkeit: versteckt;" stattdessen. Das obige funktionierte in Chrom, aber nicht in Safari.
Moulde
7

Einfach hinzufügen (keyup.enter)="yourFunction()"

Saurabh Agrawal
quelle
7
(keyup.enter)="methodname()"

Dies sollte funktionieren und bereits in vielen Antworten erwähnt, sollte jedoch auf dem Formular-Tag und nicht auf der Schaltfläche vorhanden sein.

Santosh Kadam
quelle
4

Hoffentlich kann dies jemandem helfen: Aus irgendeinem Grund konnte ich aus Zeitmangel nicht nachverfolgen, wenn Sie ein Formular wie das folgende haben:

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

Wenn Sie die EnterTaste drücken, wird die clearFormFunktion aufgerufen, obwohl das erwartete Verhalten darin bestand, die doSubmitFunktion aufzurufen . Das Ändern der ClearSchaltfläche in ein <a>Tag hat das Problem für mich gelöst. Ich würde immer noch gerne wissen, ob das erwartet wird oder nicht. Scheint mir verwirrend

Andrea Gherardi
quelle
8
Um dies zu vermeiden, haben Sie type = "button" für Clear button angegeben
radio_head
1

Wenn Sie beide einschließen möchten - akzeptieren Sie bei der Eingabe und akzeptieren Sie beim Klicken, dann tun Sie -

 <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>

quelle
1

Wenn Sie beide einfacher als das, was ich hier gesehen habe, einfügen möchten , können Sie dies einfach tun, indem Sie Ihre Schaltfläche in das Formular einfügen.

Beispiel mit einer Funktion, die eine Nachricht sendet:

                <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>

Sie können wählen, ob Sie auf die Schaltfläche klicken oder die Eingabetaste drücken möchten.

Emerica
quelle