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

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

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

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

2548閲覧

プルダウン<select>の1番目の要素で表のヘッダを兼ねるようにしたい。

hamham-km

総合スコア24

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/05/07 07:21

前提・実現したいこと

Web画面を作成しています。
以下のようなプルダウンを作りたいのですが、スマートな実装方法が分かりません。

  • プルダウンを表のヘッダ行に設置する
  • プルダウン1番目の選択肢が表のヘッダを兼ねるようにする

現状の実装(<option>の中身)

  • innerHTML="都道府県を選択", value="" ・・・・・・・デフォルトで選択されている
  • innerHTML="---未選択---", value="---未選択---"・・1番目の選択肢
  • innerHTML"=北海道", value="北海道"・・・・・・・・2番目の選択肢
  • innerHTML="青森", value="青森"・・・・・・・・・・3番目の選択肢

上記の<option>を4つ用意して、Javascriptで下記の処理をしています。

  • プルダウンがクリックされた瞬間に、"都道府県を選択"を非表示にする

⇒プルダウンの最上部には「都道府県を選択」が残るが、選択肢からは消える

  • 「---未選択---」が選択された場合、"都道府県を選択"を表示&選択状態に変える

つまり、表のヘッダ用にダミーの<option>を用意して、それを出したり消したりしているわけです。

問題点

  • PC版Chromeでの問題点:画面初回起動時にプルダウンをクリックすると、1~3番目の選択肢の下に、もう一段空白の行(選択はできない)ができる。これについては初回起動時にダミーのクリックイベントを発火させることで問題を回避しています。

今回はJavascriptで無理矢理に思い通りの動きをするようにしていますが、もっとスマートな実装方法(<select><option>の設定だけで何とかする等)はないでしょうか?
また、なぜiPhoneでうまく動かないのでしょうか?

お分りになる方がいらっしゃいましたら、アドバイスを頂ければ幸いです。

該当のソースコード

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 <body> 7 <table border="1" cellspacing="0" cellpadding="0"> 8 <tr> 9 <th>No</th> 10 <th> 11 <select onClick="setEmptyOption(this)" onChange="changePulldown(this)"> 12 <option value="">都道府県を選択</option> 13 <option value="---未選択---">---未選択---</option> 14 <option value="北海道">北海道</option> 15 <option value="青森">青森</option> 16 </select> 17 </th> 18 </tr> 19 </table> 20 </body> 21 <script> 22 23 // プルダウンの選択肢からタイトルを削除する(非表示にする) 24 function setEmptyOption(clickedElem) { 25 // タイトルに表示されているoptionの値 26 var titleOptionVal = getSelectValue(clickedElem); 27 // 選択肢 28 var optinos = clickedElem.children; 29 // タイトルに表示されているoptionの値が空白の場合 30 if (titleOptionVal=="") { 31 // タイトル用のoptionを非表示 32 optinos[0].hidden = true; 33 } 34 } 35 36 // プルダウンの値が変更されたときの処理 37 function changePulldown(changedElem) { 38 // 選択されたoptionの値 39 var selectedOptionVal = getSelectValue(changedElem); 40 // 選択肢 41 var optinos = changedElem.children; 42 //「---未選択---」を選択した場合 43 if (selectedOptionVal=="---未選択---") { 44 // タイトルoptionを表示して選択 45 optinos[0].hidden = false; 46 optinos[0].selected = true; 47 } 48 } 49 50 // 選択中のvalueを取得する 51 function getSelectValue(selectElem) { 52 var options = selectElem.children; 53 for (var i=0; i<options.length; i++) { 54 var optionValue = options[i].value; 55 if (options[i].selected==true) return options[i].value; 56 } 57 return null; 58 } 59 </script> 60</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

具体的な回答ではありませんが、select要素(option要素)の表示/非表示はブラウザにより挙動に差異が多い印象です。
select要素を空にしてしまってoption要素を作り直すほうが安全に書き換えできるかもしれません。

投稿2020/05/07 07:51

kei344

総合スコア69407

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

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

hamham-km

2020/05/07 10:32

お返事ありがとうございます。 >select要素(option要素)の表示/非表示はブラウザにより挙動に差異が多い印象です。 なるほどそうなのですね。勉強になりました! >select要素を空にしてしまってoption要素を作り直すほうが安全 そうですよね・・・。ただ空にしてしまうと、現状、プルダウンクリック時(リスト表示時)に都合よく先頭に表示されている文字列(都道府県を選択)は、ブランクになってしまいそうですね。 でも、安全性の方が優先度が高いので、他の方からより良い方法をいただけなければ、ご教示いただいた方法の実装を試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問