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

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

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

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

HTML

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

解決済

日付プルダウン処理(他のやり方)について

sky.user.
sky.user.

総合スコア15

JavaScript

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

HTML

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

1回答

0リアクション

0クリップ

2754閲覧

投稿2018/11/15 04:39

編集2018/11/15 05:34

お世話になっております。
以前の日付プルダウン処理(リンク内容)に関してです。

おかげさまで、完成させることができました!ありがとうございます。
やり方としては、onloadの時だけ年のメソッドの中の最後に、月のメソッドを呼び出す際に
引数を渡す、というものになりました。(※日も同様)
onchangeの時には何も引数を渡さない、ということです。

一応できたのは良いのですが、これだと保守性・拡張性、メソッドの独立性に欠けると思いまして、
このたび質問させていただきました。

今回やろうとしているやり方は、onload時、onchange時どちらもプルダウンを生成するには
変わりありませんが、onload時にだけ、現在の年月日を設定するメソッドを使用する、という
ものです。

一応作ってはみたのですが、★の部分で渡す1つめの引数で詰まってしまっています。。。
おそらくDOM要素の読み込みタイミングの問題なのだと思います。
(プルダウンを作るメソッドは前回の質問と同じなので省略させていただきます。すみません。)

このやり方・方向性は間違っているのでしょうか?
申し訳ありませんが、よろしくお願いします。

JavaScript

// 現在年 var NowYear = (new Date()).getFullYear(); // 現在月 var NowMonth = (new Date()).getMonth() + 1; // 現在日 var NowDate = (new Date()).getDate(); window.onload = function() { setSelectYear(); //★ setToday(document.getElementById("selectYear"),NowYear); setToday(document.getElementById("selectMonth"),NowMonth); setToday(document.getElementById("selectDate"),NowDate); } /* * onload時に、今日の日付(年月日)にセットするメソッド */ function setToday(option, Now) { for(i = 0; i < option.length(); i++){ if(i = Now){ option.selected = (Now); break; } } } /* * 年のoptionを更新 */ function setSelectYear() { // selectボックスIDからElementの取得 var selectElement = document.getElementById("selectYear"); // 現在~5年前分まで回す for (var y = NowYear; y >= NowYear - 5; y--) { // <option>要素を追加 var option = document.createElement("option"); // optionのvalue属性を設定 option.value = y; // リストに表示するテキストの設定 option.text = y; // セレクトボックスにオプションを追加 selectElement.appendChild(option); } setSelectMonth(); } /* * 月のoptionを更新 */ function setSelectMonth() { // selectボックスIDからElementの取得 var selectElement = document.getElementById("selectMonth"); // 要素削除用 var child; while (child = selectElement.firstChild) { selectElement.removeChild(child); } // 12ヶ月分回す for (var m = 1; m <= 12; m++) { // <option>要素を追加 var option = document.createElement("option"); // optionのvalue属性を設定 option.value = m; // リストに表示するテキストの設定 option.text = m; // セレクトボックスにオプションを追加 selectElement.appendChild(option); // 現在の日を引数に渡さないsetSelectDateを実行 setSelectDate(); } } /* * 日のoptionを更新 */ function setSelectDate() { // 選択された年を取得 var y = document.form1.selectYear.options[document.form1.selectYear.selectedIndex].value; // 選択された月を取得 var m = document.form1.selectMonth.options[document.form1.selectMonth.selectedIndex].value; // 閏年なら if (m == 2 && (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))) { // 2月の閏年 var last = 29; // それ以外なら } else { var lastday = new Array(11); lastday = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; last = lastday[m - 1]; } // 要素取得と初期化 var selectElement = document.getElementById("selectDate"); // 要素削除用 var child; // セレクトボックスの子要素を取得しつつループ while (child = selectElement.firstChild) { // セレクトボックスから子要素を削除 selectElement.removeChild(child); } // 1日から月の最終日まで回す for (var d = 1; d <= last; d++) { // <option>要素を追加 var option = document.createElement("option"); // optionのvalue属性を設定 option.value = d; // リストに表示するテキストの設定 option.text = d; // セレクトボックスにオプションを追加 selectElement.appendChild(option); } }

HTML

<FORM id = "form1"> <td><select name="year" id="selectYear" onchange="setSelectMonth()"> </select> 年 <select name="month" id="selectMonth" onchange="setSelectDate()"> </select> 月 <select name="date" id="selectDate"> </select> 日</td> </FORM>

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2018/11/15 05:02

URLはリンクをつけることができるのでリンク対応されたほうが回答する側としては助かります。
m.ts10806

2018/11/15 05:05

また前回質問が関係しているとはいえ、この質問だけでも完結できるように余程コードが長くないのであれば提示されたほうがいいかもしれません。
m.ts10806

2018/11/15 05:05

DOM要素の読み込みタイミングのことを気にされていますが、このJavaScriptはどの位置に置かれているのでしょうか。html上で示していただければと。
sky.user.

2018/11/15 05:10

ご回答ありがとうございます。JavaScriptの外部ファイルとしているので、HTML上ではありません。
m.ts10806

2018/11/15 05:14

失礼、表現が悪かったですね。読み込み記述の位置です。あと気になるのがhtmlが中途半端に提示されているので全体がわからないところですね。tdの中にある・・・ということですが複数selectがあったりしませんよね?tdなくても再現可能であれば余計な詮索を強いるのでselectだけ置いてあったほうが良いように思います。
m.ts10806

2018/11/15 05:19

このコード、そもそもエラー出てますが、そこは認識済みですか?それとも何か記述が抜けていたりするのでしょうか。
m.ts10806

2018/11/15 05:21

あ、name=form1でformタグ設置しなきゃいけないみたいですね。了解です。質問はその次のエラー解決となりそうですね。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JavaScript

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

HTML

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