質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
div

HTMLの<div>タグです。<div>要素は特に意味を持っていません。ひとかたまりのコンテンツに使用されるか、(セマンティックとして)他の要素では記述できないコンテンツに使用されることが多いです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

367閲覧

jqueryで【繰り返し同じタグ~同じタグ~間】をキーボードで移動するものを作成しました。divタグ~divタグ間などはうまく動作しますがinputタグ間などはうまくいきません。どうしてでしょうか?

gugupoo

総合スコア31

div

HTMLの<div>タグです。<div>要素は特に意味を持っていません。ひとかたまりのコンテンツに使用されるか、(セマンティックとして)他の要素では記述できないコンテンツに使用されることが多いです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/12/03 04:28

繰り返し同じタグ~同じタグ~間ということで、分かりにくい見出しですので以下をそのままご覧になって頂きたいと思います。
キーボードのbでタグからタグに画面表示がダウンして、aでアップして行き来できるという、
こういうページを作成したいと思っていました。以下は動作がうまくいく、divタグ同士のものです。

javascript

1<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 2<script src="https://cdnjs.cloudflare.com/ajax/libs/mousetrap/1.6.2/mousetrap.min.js"></script> 3 4 5<script> 6var pos = 0; 7 8Mousetrap.bind('a', function(){ 9 if(pos==0) return; 10 pos -= 1; 11 var hoge = $('div.cde').eq(pos).focus(); 12 var rec = hoge.offset(); 13 y = rec.top - window.pageYOffset; 14 console.log(rec) 15 window.scrollTo(0,rec.top); 16}); 17Mousetrap.bind('b', function(){ 18 var size = $('div.cde').size(); 19 if(pos==size) return; 20 pos += 1; 21 var hoge = $('div.cde').eq(pos).focus(); 22 var rec = hoge.offset(); 23 y = rec.top + window.pageYOffset; 24 console.log(rec) 25 window.scrollTo(0,rec.top); 26}); 27 28$(document).ready( function(){ 29 $('div.cde').eq(pos).focus(); 30}); 31 32</script> 33

html

11 2<div class="cde"></div> 3<br><br><br> 4 52 6<div class="cde"></div> 7<br><br><br> 8 93 10<div class="cde"></div> 11<br><br><br> 12 134 14<div class="cde"></div> 15<br><br><br> 16 175 18<div class="cde"></div> 19<br><br><br> 20

divタグのcdeクラスをキーボードのbでダウン、aでアップしません。
本題でございますが、
これの応用で、チェックボックス間を移動してチェックボックスにフォーカスを当てて、
スペースキーでチェックをいれたり、外したりできるものの作成を目指していました。

しかし以下のようなinputタグで出来たものを作成しても一つ位しかタグ~タグ間を移動せず
全体を上下に行き来することはできません。どういった原因が考えられますでしょうか。

javascript

1<script> 2var pos = 0; 3 4Mousetrap.bind('a', function(){ 5 if(pos==0) return; 6 pos -= 1; 7 var hoge = $('input.abc').eq(pos).focus(); 8 var rec = hoge.offset(); 9 y = rec.top - window.pageYOffset; 10 console.log(rec) 11 window.scrollTo(0,rec.top); 12}); 13Mousetrap.bind('b', function(){ 14 var size = $('input.abc').size(); 15 if(pos==size) return; 16 pos += 1; 17 var hoge = $('input.abc').eq(pos).focus(); 18 var rec = hoge.offset(); 19 y = rec.top + window.pageYOffset; 20 console.log(rec) 21 window.scrollTo(0,rec.top); 22}); 23 24$(document).ready( function(){ 25 $('input.abc').eq(pos).focus(); 26}); 27 28</script>

html

11 2<input class="abc" type="checkbox"> 3<br><br><br> 4 52 6<input class="abc" type="checkbox"> 7<br><br><br> 8 93 10<input class="abc" type="checkbox"> 11<br><br><br> 12 134 14<input class="abc" type="checkbox"> 15<br><br><br> 16 175 18<input class="abc" type="checkbox"> 19<br><br><br> 20 216 22<input class="abc" type="checkbox"> 23<br><br><br>

チェックボックスにフォーカスはあてて動かしたいのですが
いかがすればよろしいでしょうか・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

各チェックボックスにtabindex属性をつければよいのでは?

調整

javascript

1<style> 2#wrap div{height:999px;} 3#wrap div:nth-child(2n){background-Color:lime;} 4#wrap div:nth-child(2n+1){background-Color:yellow;} 5</style> 6 7<script> 8$(function(){ 9 $(document).on('keyup',function(e){ 10 if($(e.target).filter("body,.abc").length>0){ 11 var idx=$('.abc').index($('.abc:focus')); 12 if(idx<0) idx=0; 13 var key=String.fromCharCode(e.keyCode).toLowerCase(); 14 if(key=="b" && idx < $('.abc').length-1) idx++; 15 if(key=="a" && idx > 0) idx--; 16 $('html,body').animate({scrollTop:$('.abc').eq(idx).offset().top},0); 17 $('.abc').eq(idx).trigger('focus'); 18 } 19 }); 20}); 21</script> 22 23<div id="wrap"> 24<div>1 25<input class="abc" type="checkbox"> 26</div> 27<div> 282 29<input class="abc" type="checkbox"> 30</div> 31<div> 323 33<input class="abc" type="checkbox"> 34</div> 35<div> 364 37<input class="abc" type="checkbox"> 38</div> 39<div> 405 41<input class="abc" type="checkbox"> 42</div> 43<div> 446 45<input class="abc" type="checkbox"> 46</div> 47</div> 48

投稿2018/12/03 04:40

編集2018/12/03 07:37
yambejp

総合スコア114747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gugupoo

2018/12/03 05:09

tabindexをつけて一つだけ移動しましたがそこでやはりストップしてしまいました。 上記のdivタグのような移動はしてくれませんでした…。
yambejp

2018/12/03 05:20

ごめんなさい。全体的に何をやりたいのかイマイチ伝わってこないんですが チェックボックスのfocusをtab or shift+tabで移動するのではなく aとbで移動するという仕様でしょうか?
gugupoo

2018/12/03 05:32

そうです。 ただ細かく言いますとキーボードはaでなくてもbでなくても、 Mousetrap.bind('a',   の部分で他キーボードでも指定できるのでそこは問題ではありません。 cでもdでもキーは自由に好きなものに変更できます。 yambejp様のおっしゃられた通常のtabindexでの移動をすると画面の表示は高さがずれるといいますか 表示上見にくくなります。 ソースを実行していただければわかりますがタグごとの表示を見やすくしています。
yambejp

2018/12/03 06:21

並行して $('.abc').on('keyup',function(e){ console.log(String.fromCharCode(e.keyCode)); }); で、"B"を拾ってきたら同等の処理が入るようにするとかでしょうかね
yambejp

2018/12/03 07:37

サンプルあげときました
gugupoo

2018/12/03 09:20

yambejp様 正に指定キーボードより上下へ動き、チェックボックスが正にフォーカスで spaceキーでチェックボックスのON,OFFもできて、 凄すぎて本当に素晴らしいと感動してしまいました。 ソースの再検証も徹底致します。 自分も自分でこれほどのプログラムを組めたら・・・ 本当に有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問