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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

9404閲覧

JavaScriptで表の行選択で複数選択したい場合

_3104

総合スコア16

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/08/30 02:07

編集2017/08/30 02:31

お世話になっております。
新人プログラマーです。
現在JavaScriptでUI開発を行っております。

###前提・実現したいこと
JavaScriptで表の行選択を行い(複数選択)、
選択可能数を設定してその選択可能数を超えたら
背景色が変わらないようにしたいです。
(選択可能数が3の時に3つまでは背景色が変わる。
それ以上は背景色が変わらないようにする。)

###該当のソースコード

JavaScript

12 <script> 3 function Click_Sub(obj){ 4 if(obj.style.backgroundColor=='red'){ 5 obj.style.backgroundColor=''; 6 }else{ 7 obj.style.backgroundColor='red'; 8 } 9 } 10 </script> 1112 <tr onclick="Click_Sub(this)"> 13

###試したこと
選択時と選択解除時の背景変更はできました。

###補足情報
追加したほうが良い情報がありましたら、
教えていただけますと幸いです。

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

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

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

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

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

coco_bauer

2017/08/30 02:15

「制限をつけたい」というのは、具体的に何をすることですか?(何を制限するのですか?)
_3104

2017/08/30 02:33

指摘ありがとうございます。
guest

回答3

0

aria-selected 属性

x_xさんが提案されている方法と発想は同じですが、私は aria-selected 属性を使っています。
aria-selected 属性はWAI-ARIAの一種で、よく使われる属性を標準化する事でWebアクセシビリティを向上させようという試みです。

HTML

1<tr aria-selected="true"><td>1A</td></tr> 2<tr aria-selected="true"><td>2A</td></tr> 3<tr aria-selected="true"><td>3A</td></tr> 4<tr aria-selected="false"><td>4A</td></tr> 5<tr aria-selected="false"><td>5A</td></tr> 6<tr aria-selected="false"><td>6A</td></tr> 7<tr aria-selected="false"><td>7A</td></tr> 8<tr aria-selected="false"><td>8A</td></tr> 9<tr aria-selected="false"><td>9A</td></tr> 10<tr aria-selected="false"><td>10A</td></tr>

後述の querySelectorAll によるコーディングの為だけにマークアップする場合は aria-selected="false" を削除できますが、Webアクセシビリティの観点からすれば、「選択されていないこと」を明示する為aria-selected="false" も含めてマークアップするのが好ましいと思います。

querySelectorAll

変更されたtr要素は querySelectorAll によって拾うことが出来ます。

JavaScript

1document.querySelectorAll('tr[aria-selected="true"]')

Re: _3104 さん

投稿2017/08/30 03:07

編集2017/08/30 03:08
think49

総合スコア18162

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

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

_3104

2017/08/30 03:28

回答ありがとうございます。 そちらの手法でも組んでみたいと思います
guest

0

styleを直接書き換えると管理が面倒になるので、classにしたほうがいいかもしれません。

CSS

1tr.selected td { background-color: red; }

そのうえで、tbody(table)以下の対象のclassの数を数えて制限値未満かどうか判定すればいいでしょう。
element.classList
https://developer.mozilla.org/ja/docs/Web/API/Element/classList

投稿2017/08/30 02:39

x_x

総合スコア13749

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

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

_3104

2017/08/30 02:49

回答ありがとうございます。 まず現在の書き方で組んだあとに、classに変更してみたいと思います。
x_x

2017/08/30 02:58

そうですか。classならgetElementsByClassName().lengthで済むのですが、styleまで見るとなると、ループを回さないといけないかもしれません。
_3104

2017/08/30 03:27

classのほうが簡単なんですね。 現在勉強中なので様々なやり方を学んでいきたいです。 後にclassで書いてみて、またわからないことを質問させていただきます。
guest

0

ベストアンサー

グローバル空間に現在の選択数をカウントする変数を用意しておき、
選択時に加算・選択解除時に減算するというのはどうでしょうか。
上限数も同じくグローバル空間に定義しておくと良いでしょう。

※サンプルコード書いてましたが新人さんとのことでご本人の後学のためいったん削除しました。
履歴より確認可能ですが、まずは私の冒頭のヒントを元に組んでみてください。

投稿2017/08/30 02:22

編集2017/08/30 02:25
m.ts10806

総合スコア80850

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

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

_3104

2017/08/30 02:38

回答ありがとうございます。 参考にさせていただき、一度組んでみたいと思います。
m.ts10806

2017/08/30 02:40

がんばってください。 また、「選択状態を画面遷移しても維持したい」など追加の要件がありましたら教えてください。
_3104

2017/08/30 03:15

できました! 書いた後でサンプルコードをみて、変数名やコメントの 書き方など勉強になりました。 「選択状態を画面遷移しても維持したい」 まさにその要件があるので、新たな質問としてあげたいと思います。
m.ts10806

2017/08/30 03:18

そうなると「現在のカウント数」を維持する仕組みがこのやり方だと微妙なところになるので、 x_xさんやthink49さんのような効率的な書き方も検討してみてください。私のは生javascriptで結構原始的なやり方なので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問