お世話になっております。
以前の日付プルダウン処理(リンク内容)に関してです。
おかげさまで、完成させることができました!ありがとうございます。
やり方としては、onloadの時だけ年のメソッドの中の最後に、月のメソッドを呼び出す際に
引数を渡す、というものになりました。(※日も同様)
onchangeの時には何も引数を渡さない、ということです。
一応できたのは良いのですが、これだと保守性・拡張性、メソッドの独立性に欠けると思いまして、
このたび質問させていただきました。
今回やろうとしているやり方は、onload時、onchange時どちらもプルダウンを生成するには
変わりありませんが、onload時にだけ、現在の年月日を設定するメソッドを使用する、という
ものです。
一応作ってはみたのですが、★の部分で渡す1つめの引数で詰まってしまっています。。。
おそらくDOM要素の読み込みタイミングの問題なのだと思います。
(プルダウンを作るメソッドは前回の質問と同じなので省略させていただきます。すみません。)
このやり方・方向性は間違っているのでしょうか?
申し訳ありませんが、よろしくお願いします。
JavaScript
1// 現在年 2var NowYear = (new Date()).getFullYear(); 3 4// 現在月 5var NowMonth = (new Date()).getMonth() + 1; 6 7// 現在日 8var NowDate = (new Date()).getDate(); 9 10window.onload = function() { 11 setSelectYear(); 12 13 //★ 14 setToday(document.getElementById("selectYear"),NowYear); 15 setToday(document.getElementById("selectMonth"),NowMonth); 16 setToday(document.getElementById("selectDate"),NowDate); 17} 18 19/* 20 * onload時に、今日の日付(年月日)にセットするメソッド 21 */ 22function setToday(option, Now) { 23 for(i = 0; i < option.length(); i++){ 24 25 if(i = Now){ 26 option.selected = (Now); 27 break; 28 } 29 } 30} 31 32/* 33 * 年のoptionを更新 34 */ 35function setSelectYear() { 36 37 // selectボックスIDからElementの取得 38 var selectElement = document.getElementById("selectYear"); 39 40 // 現在~5年前分まで回す 41 for (var y = NowYear; y >= NowYear - 5; y--) { 42 43 // <option>要素を追加 44 var option = document.createElement("option"); 45 46 // optionのvalue属性を設定 47 option.value = y; 48 49 // リストに表示するテキストの設定 50 option.text = y; 51 52 // セレクトボックスにオプションを追加 53 selectElement.appendChild(option); 54 } 55 setSelectMonth(); 56} 57 58/* 59 * 月のoptionを更新 60 */ 61function setSelectMonth() { 62 63 // selectボックスIDからElementの取得 64 var selectElement = document.getElementById("selectMonth"); 65 66 // 要素削除用 67 var child; 68 69 while (child = selectElement.firstChild) { 70 selectElement.removeChild(child); 71 } 72 73 // 12ヶ月分回す 74 for (var m = 1; m <= 12; m++) { 75 76 // <option>要素を追加 77 var option = document.createElement("option"); 78 79 // optionのvalue属性を設定 80 option.value = m; 81 82 // リストに表示するテキストの設定 83 option.text = m; 84 85 // セレクトボックスにオプションを追加 86 selectElement.appendChild(option); 87 88 // 現在の日を引数に渡さないsetSelectDateを実行 89 setSelectDate(); 90 } 91} 92 93/* 94 * 日のoptionを更新 95 */ 96function setSelectDate() { 97 98 // 選択された年を取得 99 var y = document.form1.selectYear.options[document.form1.selectYear.selectedIndex].value; 100 101 // 選択された月を取得 102 var m = document.form1.selectMonth.options[document.form1.selectMonth.selectedIndex].value; 103 104 // 閏年なら 105 if (m == 2 && (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))) { 106 107 // 2月の閏年 108 var last = 29; 109 110 // それ以外なら 111 } else { 112 var lastday = new Array(11); 113 lastday = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; 114 last = lastday[m - 1]; 115 } 116 117 // 要素取得と初期化 118 var selectElement = document.getElementById("selectDate"); 119 120 // 要素削除用 121 var child; 122 123 // セレクトボックスの子要素を取得しつつループ 124 while (child = selectElement.firstChild) { 125 126 // セレクトボックスから子要素を削除 127 selectElement.removeChild(child); 128 } 129 130 // 1日から月の最終日まで回す 131 for (var d = 1; d <= last; d++) { 132 133 // <option>要素を追加 134 var option = document.createElement("option"); 135 136 // optionのvalue属性を設定 137 option.value = d; 138 139 // リストに表示するテキストの設定 140 option.text = d; 141 142 // セレクトボックスにオプションを追加 143 selectElement.appendChild(option); 144 } 145}
HTML
1<FORM id = "form1"> 2<td><select name="year" id="selectYear" onchange="setSelectMonth()"> 3</select> 年 4<select name="month" id="selectMonth" onchange="setSelectDate()"> 5</select> 月 6<select name="date" id="selectDate"> 7</select> 日</td> 8</FORM> 9
回答1件
あなたの回答
tips
プレビュー