私はJSで動的なWebページを持っています。 テキストエリアとボタンを送信しますが、フォームタグはありません。どのように私は提出ボタン火災やを入力したときにがクリアされテキストエリアがテキストエリアに押されて?作るのですか"Enter"を押してテキストエリアからデータを送信
答えて
テキストエリア用のキーアップハンドラを使用できます(ただし、私はそれに反対します*)。
[SomeTextarea].onkeyup = function(e){
e = e || event;
if (e.keyCode === 13) {
// start your submit function
}
return true;
}
*これにテキスト入力フィールドを使用してみませんか? Textareaは、1行入力用のテキスト入力フィールドである複数行入力には特に適しています。入力ハンドラを使用すると、複数行の入力をまとめることができます。 XHR(別名AJAX)チャットアプリケーション(これはテキストエリアがMSN入力エリアのように動作するように)を一度使用したことを覚えていますが、CTRL-Enterキーを使用して複数行の入力を再度有効にしました。それはあなたのためのアイデアかもしれない?
[SomeTextarea].onkeyup = function(e){
e = e || event;
if (e.keyCode === 13 && !e.ctrlKey) {
// start your submit function
}
return true;
}
いいね、ありがとう。何が必要ですか?* e = e ||イベント; *? – Alex
@Alex:firefox、opera、およびsafari(およびWebkitを組み込んだ他のブラウザ)は、イベントハンドラへの引数としてイベントを渡しますが、IEではそうではありません。 IEでは、イベントはグローバルオブジェクトのプロパティです。幸いなことに、|| JSでは、これを回避するためには本当にきれいです。 JSでは、式 'a || bは 'a'の値になり、' a'が偽とみなされた場合、結果は 'b'になります。したがって、この場合、e = e || event'は、イベントが引数として渡された場合に 'e'を代入するか、' event'の 'e'を' e'に設定して、このコードをすべてのブラウザで動作させます。 – olliej
ヒット入力textarea
に入力すると、親フォームを送信するのではなく改行が挿入されます。これは通常のフォームタグでもその方法では機能しません。
この動作を回避することは、他のWebサイトとそのプラットフォーム上の他のアプリケーションの両方で、テキスト領域コントロールがどのように動作するかというユーザーの期待に反するため、避けてください。
++をラップしません。ウェブサイトのテキストエリアでエンターキーが何をするかを常に知っていることは、他のGUIを使用するときに見落とす多くの小さな一貫性の1つです。 – Shog9
私はあなたのアドバイスに完全に同意しますが、手元の質問は非常に正確に定式化されており、良いアドバイスよりも本当の答えが必要です。 +1がまだありますが、あなたが入力したフォームを提出するためにkeyListenerをテキストエリアに接続する方法についてアドバイスできませんでしたか?私はむしろ興味があります... –
私はこの回答を長い間前倒ししましたが、ユーザーが実際に彼がテキストエリアに入力していることを知らないケースがあります。たとえば、facebookのチャットの入力行を考えてみましょう。これは、1行として開始し、ユーザーがより多くのタイプを入力すると、垂直方向に拡張されます。ユーザーが入力時に提出することを期待するのは絶対に理にかなっています。 – hasen
ここに私のソリューションです:JavaScriptで
:HTMLで
function isEnterPressed(e){
var keycode=null;
if (e!=null){
if (window.event!=undefined){
if (window.event.keyCode) keycode = window.event.keyCode;
else if (window.event.charCode) keycode = window.event.charCode;
}else{
keycode = e.keyCode;
}
}
return (keycode == 13);}
:
<input type="text" onkeyup="if(isEnterPressed(event)){/*do something*/}" />
Shog9私は私をコピーすることが示唆@リスナーは次のように拡張されるだろうこの質問の重複したバージョンへの回答: この無視する1つの問題は、ユーザーの実行です入力方法(エディタ) - 例えば。非ラテン文字入力。私がよく知っているIMEは、OSX上のKotoeri Hiragana IMですが、ハングルのためのモードに加えて、日本語のための多くのものがあります(Kotoeriだけで複数の異なる入力モードがあり、ATOKと呼ばれる少なくとも1つの主要なモードがあります)繁体字中国語、簡体字中国語、その他のあまり知られていない言語があります。これらの入力方法は、すべての主要なプラットフォーム(特に、Win、Mac、Linux)に存在します。
あなたが試みているのと同じようなコードの観点から導入する問題は、正確な物理的なキーの押下が、ユーザーが入力している実際の入力と必ずしも一致しないことです。文字列とうきょう
が生成されますデフォルトではひらがなの下の文字toukyou<enter>
のシーケンスを入力する例えば
は、変換テキストを確認し、入力したため、結果として得られるテキストには<enter>
が存在しないことに注意してください。しかし、入力が入力されると、変更を表示されますこの文字に加えて、実際の配列:
t // t
と // to
とう // tou
とうk // touk
とうky // touky
とうきょ // toukyo
とうきょう // toukyou
メモリが提供している場合、私はWebKitの中でこれを実装するとき、のkeyCodeが入力されたすべてのキーのKeyDownイベントに229可能にする必要がありました(IEとの互換性のための)IMEで - しかし、私はkeyUpの動作が何であるか思い出すことができません。
一部のIMEでは、必ずしもキーダウン、キー押下、キーアップを受信するとは限りません。または、複数を受け取ることになります。または、入力の最後にすべてが一緒に送信されます。
これは、現在、DOMイベント実装の非常に不潔な部分です。
テキストエリアは、複数行のテキストを入力できるようにするため、Enterキーを押すとテキストに新しい行が挿入されます。その動作を希望する場合は、代わりに通常のテキストフィールドを使用してください。
フォームラッパーを使用しない理由はありますか?
$('#input_id').keypress(function(e){
if(e.which == 13){
$('#form_id').submit();
return false; //prevent duplicate submission
}
});
- 1. テキストエリアにEnterキーを押して値を送信し、Shift + Enterを押すと次の行に移動します。
- 2. ReactJsフォームEnterキーを押して送信
- 3. Enterを押すか送信ボタンを押してフォームを送信するには?
- 4. Enterを押すと常に送信フォーム
- 5. PHP - HTML - Javascript - 入力ボタンを押してテキストエリアからテキストを送信
- 6. フォームリフレッシュを行わずにEnterキーを押してフォームを送信
- 7. WindowsフォームでEnterキーを押して送信
- 8. ステートレスコンポーネントのReactでEnterキーを押してテキストエリアをクリアする
- 9. テキストエリアに「Enter」キーを作成する方法フォームを送信
- 10. ENTERを押したときのみ送信します。
- 11. ENTERを押したときに特定のボタンを送信
- 12. Enterキーを押したときのWPFフォーム送信の防止
- 13. Enterキーを押した後にテキストエリアをクリアする
- 14. フォームを送信する代わりにEnter Enterを押すと、フォームが送信されます
- 15. 複数の送信ボタンでEnterキーを押す
- 16. JQuery:送信ボタンを押さなくてもデータを送信できますか?
- 17. Yii2 - Enterキーを押したときではなく、送信ボタンをクリックするだけでアクティブフォームを送信
- 18. Enterボタンを押してからOKボタンを押すと、その欲しい
- 19. Enterキーでログインを送信
- 20. キーを押してポップアップを送信
- 21. テキストエリアでhtmlフォームを送信
- 22. Enterキーを押してdjangoでデータベースにデータを追加する
- 23. フィルターで「Enter」を押してもリクエストを送信できますか?そのフィールドにも設定したい
- 24. TestStack.White Frameworkを使用してキーボードからEnterを送信する方法
- 25. テキストボックスにenterを押してボタンセットを送信し、IEで問題を解除します
- 26. angleのng-submit()指示文は、テキストフィールドの1つでEnterキーを押しながら送信しません。
- 27. テキストエリアからの新しい行の送信
- 28. Django:しばらくすると、重複したデータを再送信しないでください。キーボードのEnterキーを押してください。
- 29. jEditable TABとENTERで送信
- 30. チェックボックスをオンにしてEnterキーを押したときにフォームが送信されない
誤解を招いて申し訳ありません。私はテキストエリアを読むが、入力タイプ= "テキスト"と思う......私の愚かな答えを削除しました:) –
人々はなぜテキストエリアの代わりに入力[テキスト]を使わないのか質問しています。私にとっては、ユーザーが1行のテキストだけを入力できるようにしたいのですが、テキストを複数の行に折り返したいとします。入力[テキスト]は、 "不適切な"段落のために –