送信ボタンなしでEnterキーを押して、angular2送信フォーム


99

送信ボタンのないフォームを送信することは可能ですか?

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

回答:


77

入力フィールドに、keypressまたはkeydown入力フィールドに追加して、Enterがクリックされたときに送信を実行する関数にイベントを割り当てます。

テンプレートは次のようになります

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

そして、あなたのクラスの内部で機能すると、このようになります

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

206

追加することもできます (keyup.enter)="xxxx()"


これは、送信ハンドラの代わりに呼び出す単純な古い関数がある場合に効果的です
Scott R. Frost

3
このアプローチはAngularのドキュメントで言及されました。angular.io/docs/ts/latest/guide/...
trungk18

これが私の状況で動作する唯一の方法です、ありがとう!
switch87 2018

5
これは受け入れられる答えになるはずです。Angularが達成できる方法でのみエレガンス。鮮やかさ。
スコット・バイヤー

Angularドキュメントでの新しい言及:angular.io/guide/user-input#key-event-filtering-with-keyenter
Rafael Neto

84

編集:

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

この方法を使用するためには、あなたはそれが「のおかげで表示されていない場合でも、送信ボタンを持っている必要がありますツールキットの答えを

古い答え:

はい、あなたが書いたとおりですが、イベント名が次の(submit)代わりになってい(ngSubmit)ます:

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


2
プランカーを提供していただけますか?機能しないため
ツールキット

「visibility:hidden;」を使用します 代わりに。「display:none;」Chromeでは機能しましたが、Safariでは機能しませんでした。
Moulde

これを使用する必要があります。ただし、送信ボタンを非表示にせずに表示しないようにする必要があります。そのため、一部の人々はそのボタンを探して、Enterキーを押す必要がありません。
インパルスザフォックス

31

(keydown.enter)="mySubmit()"カーソルがaのどこかにある<textarea>が最後ではない場合、改行が追加されないので、私は好みます。


1
これは受け入れられる解決策であるはずです-よりクリーン
rhysclay

27

この方法は非常に簡単です...

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

</form>

2
ありがとう、思ったより楽です。次のように解決されます:<input type = "text" class = "form-control" [(ngModel)] = "object.LanguageTableData"(blur)= "mymethod()"(keyup.enter)= "mymethod()" / >
Loutocký

1
$ eventで関数を送信するよりも、この方法の方がはるかに簡単です。ありがとうございました!
ヘレン

1
ずっといい。非表示のボタンやjsはありません。純粋な角度の方法
RenanSS

10

遅れを避けるために、常にkeyup.enterではなくkeydown.enterを使用してください。

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

そして、component.ts内で機能します

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


7

非表示の送信ボタンを追加するのがコツ

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


「visibility:hidden;」を使用します 代わりに。上記はChromeでは機能しましたが、Safariでは機能しませんでした。
Moulde


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

これは機能し、すでに多くの回答で言及されていますが、ボタンではなくフォームタグに存在する必要があります。


4

うまくいけば、これが誰かを助けることができます:何らかの理由で、あなたが次のようなフォームを持っている場合、時間がないために追跡できませんでした:

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

あなたがヒットしたときにEnter、ボタンを、clearForm機能が期待されるふるまいを呼び出すことだったにも関わらず、呼び出されたdoSubmit関数。Clearボタンを<a>タグに変更すると、問題が解決しました。それが予想されるかどうか、私はまだ知りたいです。私を混乱させるようです


8
それを回避するには、クリアボタンにtype = "button"を指定します
radio_head

2

私がここで見たものよりも両方を単純に含めたい場合はフォーム内にボタンを含めるだけでそれを行うことができます。

メッセージを送信する関数の例:

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

ボタンをクリックするか、Enterキーを押すかを選択できます。


1

両方を含める場合-Enterで受け入れるとClickで受け入れると、

 <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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.