angular2 gönder düğmesi olmadan enter tuşuna basarak formu gönderin


103

Gönder düğmesi olmayan bir form göndermek mümkün mü (enter tuşuna basarak) örnek:

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

Yanıtlar:


79

belki ekleyebilir keypressveya keydowntıklandığında girdiğinizde giriş alanlarının ve yapacak işleve olay atamak göndermek

şablonunuz böyle görünür

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

Ve sınıfının içinde böyle görüneceksin

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

213

Ayrıca ekleyebilirsiniz (keyup.enter)="xxxx()"


Gönderme işleyicisi yerine çağırmak istediğiniz basit eski bir işleviniz varsa bu harika çalışır
Scott R. Frost

3
Bu yaklaşımdan Angular belgelerinde bahsedilmiştir. angular.io/docs/ts/latest/guide/...
trungk18

Benim durumumda çalışmasının tek yolu bu, teşekkürler!
switch87

5
Kabul edilen cevap bu olmalıdır. Sadece Angular'ın başarabileceği şekilde zarafet. Parlak.
Scott Byers


85

Düzenle:

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

Bu yöntemi kullanmak için, bunu "için teşekkürler görüntülenen olmasa bile bir Gönder düğmesini olması gerekir Toolkit'in cevap "

Eski Cevap:

Evet, aynen yazdığınız gibi, ancak etkinlik adı şunun (submit)yerine (ngSubmit):

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


2
lütfen bir plunker sağlar mısınız? çünkü işe yaramıyor
Araç Seti

"Visibility: hidden;" kullanın yerine. "Display: none;" kromda çalıştı ama safaride değil.
Moulde

Bu, gönder-düğmesinin gizlenmemesi, görünür olmaması dışında kullanılmalıdır çünkü bazı insanlar bu düğmeyi arayacak ve enter tuşuna basmakla uğraşmayacaklardır.
Impulse The Fox

31

(keydown.enter)="mySubmit()"İmleç a'nın içinde bir yerdeyse <textarea>ancak sonunda değilse satır sonu eklenmemesini tercih ederim .


1
Bu kabul edilen çözüm olmalı - çok daha temiz
rhysclay

30

Bu yol çok basit ...

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

</form>

2
Teşekkür ederim, beklediğimde daha kolay. Şu şekilde çözüldü: <input type = "text" class = "form-control" [(ngModel)] = "object.LanguageTableData" (blur) = "mymethod ()" (keyup.enter) = "mymethod ()" / >
Loutocký

1
$ event ile bir fonksiyon göndermek yerine bu şekilde çok daha kolay. Teşekkür ederim!
Helen

1
çok daha iyi. gizli düğme veya js yok. Saf açısal yol
RenanSS

Bunu yapmak zorundaydı: <form # f = "ngForm" (keyup.enter) = "appendSigBlock (f.value)"> Angular 9 kullanarak ama harika çalışıyor.
Ürdün

10

Gecikmeyi önlemek için her zaman keyup.enter yerine keydown.enter kullanın.

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

ve component.ts içinde işlev görür.

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

10

bunu giriş etiketinize ekleyin

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

teşekkürler kardeşim. Bu seçeneği seçilen cevaba tercih ediyorum.
Santosh

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

bu işe yaramalı ve birçok yanıtta zaten belirtilmeli, ancak bu, düğme üzerinde değil form etiketinde bulunmalıdır.


7

görünmez bir gönder düğmesi eklemek işe yarıyor

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


"Visibility: hidden;" kullanın yerine. Yukarıdakiler kromda çalıştı, ancak safaride değil.
Moulde


4

Umarım bu birisine yardımcı olabilir: Bazı nedenlerden dolayı, zaman eksikliğinden dolayı takip edemedim, eğer aşağıdaki gibi bir formunuz varsa:

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

Eğer vurduğunda Enterdüğmesini, clearFormfonksiyon beklenen davranış aramaya olmasına rağmen denir doSubmitişlevi. Değişen Clearbir düğmeyi <a>etiketi benim için sorun çözüldü. Yine de bunun beklenip beklenmediğini bilmek istiyorum. Bana kafa karıştırıcı geliyor


8
bunu önlemek için, Temizle düğmesi için type = "button" belirtin
radio_head

3

Her ikisini de burada gördüğümden daha basit bir şekilde dahil etmek istiyorsanız, bunu sadece düğmenizi formun içine ekleyerek yapabilirsiniz.

Mesaj gönderen bir işlev örneği:

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

Düğmeye tıklama veya enter tuşuna basma arasında seçim yapabilirsiniz.


Bunu @Clayton KN Passos cevabıyla birlikte kullanmak zorunda kaldım ve harika çalıştı!
Ürdün

1

Her ikisini de dahil etmek istiyorsanız - girişte kabul edin ve kabul edin tıklayın ve sonra yapın -

 <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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.