WordPressでウェブサイトを構築しております。
WP MW formというプラグインを利用してお問い合わせフォームを設置しているのですが、入力中にエンターキーを押した際に確認画面へ移動してしまうので、エンターキーを押した際にtabキーを押した動作と同様に、次のインプットに移動する作りにしたいと考えております。
javascriptで制御できるかと思うのですが、疎いためどのような記述をすればよいか分かりません。
可能であれば、コードの要点の解説もしてくださると大変助かります。
何卒よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
考え方は色々有りますがe.keyCodeをチェックするのが一般的です
ただしtabindex通りに移動したい時どうするかとか
type=text以外はどうしたいのかなど仕様を固める必要があります
javascript
1document.addEventListener('keydown',function(e){ 2 var t=e.target; 3 if(t.nodeName=="INPUT" && t.type=="text" && e.keyCode==13){ 4 var f=t.form; 5 for(var i=0;i<f.length;i++){ 6 if(f.elements[i]==t){ 7 f.elements[(i==f.length-1)?0:i+1].focus(); 8 } 9 } 10 e.preventDefault(); 11 } 12}); 13
HTML
1<form> 2<input type="text" name="n1" tabindex="1"> 3<input type="text" name="n2" tabindex="2"> 4<input type="text" name="n3" tabindex="4"> 5<input type="text" name="n4" tabindex="3"> 6<input type="submit" value="go"> 7</form> 8
追記
ご指定の内容で特に問題ないようですよ
ご利用の環境ではなにかライブラリでキーイベントに機能が付加されているのかもしれません
email、hiddenに対応しました
javascript
1<script> 2document.addEventListener('keydown',function(e){ 3 var t=e.target; 4 if(t.nodeName=="INPUT" && (t.type=="text"||t.type=="radio"||t.type=="email") && e.keyCode==13){ 5 var f=t.form; 6 var k=0; 7 for(var i=0;i<f.length;i++){ 8 if(f.elements[i]==t){ 9 for(var j=1;j<=f.length;j++){ 10 var k=(i+j*(e.shiftKey?-1:1)+f.length)%f.length; 11 if(f.elements[k].type!="hidden") break; 12 } 13 f.elements[k].focus(); 14 break; 15 } 16 } 17 e.preventDefault(); 18 } 19}); 20</script> 21<form> 22<table> 23<tbody> 24<tr><td>要件:</td><td><input type="radio" name="yoken" value="問い合わせ">問い合わせ 25<input type="radio" name="yoken" value="サンプル">サンプル 26<input type="radio" name="yoken" value="その他">その他</td></tr> 27<tr><td>会社:</td><td><input type="text" name="kaisha"></td></tr> 28<tr><td>名前:</td><td><input type="text" name="namae" required>(必須)</td></tr> 29<tr><td>mail:</td><td><input type="email" name="mail" required>(必須)</td></tr> 30<tr><td>電話:</td><td><input type="text" name="denwa"> 31<input type="hidden" name="hoge1" value="fuga"> 32<input type="hidden" name="hoge2" value="fuga"> 33<input type="hidden" name="hoge3" value="fuga"></td></tr> 34<tr><td>住所:</td><td><input type="text" name="jusho"></td></tr> 35<tr><td>内容:</td><td><input type="text" name="naiyo" required>(必須)</td></tr> 36</tbody> 37</table> 38
投稿2017/08/22 03:40
編集2017/08/23 03:27総合スコア114843
0
投稿2017/08/22 07:04
総合スコア33
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
単純にテキストエリア以外でエンターキーが効かなければ良いのではないでしょうか?
ページのスラッグがcontact
だとして
<?php if ( is_page( 'contact' ) ){ echo '<script>$(function(){$("input").on("keydown", function(e) {if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {return false;} else {return true;}});});</script>'; } ?>
そのページのテンプレートかheader.phpにでも書いておけば良いです。
参考まで。
追記
少し調べればいくらでも情報はあると思いますけど。
https://teratail.com/questions/14080
このページのコードそのままです。
<?php if ( is_page( 'contact' ) ){ echo '<script type="text/javascript">$(window).load(function() {$("input,select").on("keypress", function(ev){var $me = $(this);var $list = $("input:enabled:not([readonly]),select:enabled");if (ev.keyCode == 13) {$list.each(function(index){if ($(this).is($me)) {$list.eq(index+1).focus();ev.preventDefault();}});}});});</script>'; } ?>
投稿2017/08/22 04:09
編集2017/08/22 05:06退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/22 04:15
2017/08/22 05:31
退会済みユーザー
2017/08/22 06:01
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/22 03:46
2017/08/22 03:54
2017/08/22 04:04
2017/08/22 04:14
2017/08/22 05:39
2017/08/23 02:10
2017/08/23 03:28
2017/08/23 03:37