HTML
1<form action="" method="post" onkeydown="if(event.keyCode == 13){return false;}"> 2 ・ 3 ・ 4 ・ 5</form>
フォーム全体に対してEnterキーが無効になっています。(上記onkeydownは都合上変更できません)
このフォームの中のある一つのtextareaでのみEnterキーを有効にしたい(改行できるようにしたい)場合、どうすればよいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
対象の <textaera>
に keydown
イベントリスナーを登録して、その中でイベントの stopPropagation()
を呼んでください。
イベントが先祖要素までバブルしなくなり、<form>
のonkeydown
が呼ばれなくなります。
投稿2021/04/22 04:18
総合スコア21927
0
ベストアンサー
ホワイトリストかブラックリストで処理するとよいでしょう
javascript
1<form action="" method="post" onkeydown="if(!['textarea','submit'].includes(event.target.type) && event.keyCode == 13){return false;}"> 2<input type="text"> 3<input type="checkbox"> 4<textarea></textarea> 5<input type="submit" value="send"> 6</form>
ただしformにイベントリスナーを直接書くのはおすすめしないのでjsを分離したほうがよいでしょう
追加処理
javascript
1document.addEventListener('keydown',e=>{ 2 const selection = getSelection(); 3 const t=e.target; 4 if(t.closest('textarea')){ 5 const v=t.value; 6 const s=t.selectionStart; 7 if(e.keyCode == 13){ 8 e.preventDefault(); 9 t.value=v.substring(0,s)+"\n"+v.substring(s); 10 t.selectionStart=s+1; 11 t.selectionEnd=s+1; 12 } 13 } 14});
投稿2021/04/22 00:40
編集2021/04/22 04:54総合スコア117669
0
恐らく一番シンプルに、その「有効にしたい」以外の要素を一つ一つ無効にしていく方が確実かと思います。
Jqueryを利用すればclassを追加するだけで簡単に切り替えができます。
html
1<textarea class="offenter"></textarea> 2<textarea></textarea> 3<script> 4 //Jqueryを読み込む必要があります 5 $('.offenter').on('keydown',function (e) { 6 if (e.key == 'Enter') { 7 return false; 8 } 9 }); 10</script>
投稿2021/04/21 13:32
総合スコア184
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/22 08:29