作成したプルダウンメニューについての評価を頂いた際に、
ヘッダの中にscriptを書いたほうが良いと言われたので移植してみたのですが、
なぜか動かなくなりました。
とても慎重に行ったのでコピペ漏れがあるとかは無いと思います。
out.printを用いて上から見ていったところ、★の箇所で止まっている様でした。
これはコピペ移植する前の状態の時に、
サンプルソースから引っ張ってきた時からくっついていたもので、
正直存在意義が分からなかったので消そうとしたらエラーが発生するので
見てみぬフリをしてやり過ごそうとした所でした。
質問の要点は2つです。
なぜscriptの位置を動かしただけでエラーが発生したのか。
このエラーが出ている★箇所は本来どういう目的で作用していて、
どう対応すれば本来の動きに戻るか、です。
どうかよろしくお願いします。
↓動いていた時のコード
lang
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3 <head> 4 <title>情報入力画面</title> 5 <meta http-equiv="Content-Script-Type" content="text/javascript"> 6 </head> 7 <body bgcolor = "#bce2e8"> 8 9 <form name="registration" method="post" action="" onSubmit="return check()"> 10 <hr width="100%" size="4"> 11 <font size="7" color="#0000ff"><div align=center>情報入力画面</div></font> 12 <hr width="100%" size="4"> 13 <table width="400px" height="60%" border="0" align="center" valign ="middle"> 14 15 <tbody> 16 <tr> 17 <td valign ="middle"> 18 <div>生年月日<select name="selectYear" id="selectYear" onchange="setSelectMonth()"> 19 </select>年<select name="selectMonth" id="selectMonth" onchange="setSelectDate()"> 20 </select>月<select name="selectDate" id="selectDate"> 21 </select>日</div> 22 <div align="center"><input type="submit" value="登録"</input></div> 23 </td> 24 </tr> 25 </tbody> 26 </table> 27 <hr width="100%" size="4"> 28 </form> 29<script type="text/javascript">//属性 30<!-- 31 32/*=========[ 生年月日 : プルダウン選択 ]=========*/ 33 34var Now = new Date(); 35var NowYear = Now.getFullYear(); 36 37/*[ オプションを更新(年) ]*/ 38 39function setSelectYear(){ 40 for(var y=NowYear-40; y<NowYear-17; y++){ 41 42 //selectボックスIDからElementの取得 43 var selectElement = document.getElementById("selectYear"); 44 45 //<option>要素を追加 46 var option = document.createElement("option"); 47 //optionのvalue属性を設定 48 option.value = y; 49 //リストに表示するテキストの設定 50 option.text = y; 51 //セレクトボックスにオプションを追加 52 selectElement.appendChild(option); 53 } 54 setSelectMonth(); 55 56} 57setSelectYear();//★★★存在意義がわからなかった★★★ 58 59/*[ オプションを更新(月) ]*/ 60function setSelectMonth(){ 61var selectElement = document.getElementById("selectMonth"); 62var child; 63//セレクトボックスの子要素を取得しつつループ 64while(child = selectElement.firstChild){ 65 //セレクトボックスから子要素を削除 66 selectElement.removeChild(child); 67} 68 69for(var m=1; m<=12; m++){ 70 var option = document.createElement("option"); 71 option.value = m; 72 option.text = m; 73 74 selectElement.appendChild(option); 75 76 } 77 setSelectDate(); 78} 79 80/*[ オプションを更新(日) ]*/ 81 82function setSelectDate(){ 83 //選択された年を取得 84 var Year = 85 document.registration.selectYear.options[ 86 document.registration.selectYear.selectedIndex].value; 87 //選択された月を取得 88 var Month = 89 document.registration.selectMonth.options[ 90 document.registration.selectMonth.selectedIndex].value; 91 92 //うるう年に対応出来る月の最終日を取得 93 var lastDate = new Date(Year,Month,0).getDate(); 94 95 var selectElement = document.getElementById("selectDate"); 96 var child; 97 while(child = selectElement.firstChild){ 98 selectElement.removeChild(child); 99 } 100 101 for(var d=1; d<=lastDate; d++){ 102 var option = document.createElement("option"); 103 option.value = d; 104 option.text = d; 105 selectElement.appendChild(option); 106 } 107} 108// --> 109</script> 110</body> 111 112</html>
↓移植して動かなくなったコード
lang
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3 <head> 4 <title>情報入力画面</title> 5 <meta http-equiv="Content-Script-Type" content="text/javascript"> 6 <script type="text/javascript">//属性 7<!-- 8/*=========[ 生年月日 : プルダウン選択 ]=========*/ 9 10var Now = new Date(); 11var NowYear = Now.getFullYear(); 12 13/*[ オプションを更新(年) ]*/ 14setSelectYear(); 15function setSelectYear(){ 16 for(var y = NowYear-40; y <= NowYear-17; y++){ 17 18 //selectボックスIDからElementの取得 19 var selectElement = document.getElementById("selectYear"); 20 21 //<option>要素を追加 22 var option = document.createElement("option"); 23 //optionのvalue属性を設定 24 option.value = y; 25 //リストに表示するテキストの設定 26 option.text = y; 27 //セレクトボックスにオプションを追加 28 selectElement.appendChild(option); 29 } 30 setSelectMonth(); 31 32} 33setSelectYear();//★★★ここで止まる★★★ 34 35/*[ オプションを更新(月) ]*/ 36function setSelectMonth(){ 37 var selectElement = document.getElementById("selectMonth"); 38 var child; 39 40//セレクトボックスの子要素を取得しつつループ 41while(child = selectElement.firstChild){ 42 //セレクトボックスから子要素を削除 43 selectElement.removeChild(child); 44} 45 46for(var m = 1; m <= 12; m++){ 47 var option = document.createElement("option"); 48 option.value = m; 49 option.text = m; 50 51 selectElement.appendChild(option); 52 53 } 54 setSelectDate(); 55} 56 57/*[ オプションを更新(日) ]*/ 58 59function setSelectDate(){ 60 //選択された年を取得 61 var Year = 62 document.registration.selectYear.options[ 63 document.registration.selectYear.selectedIndex].value; 64 //選択された月を取得 65 var Month = 66 document.registration.selectMonth.options[ 67 document.registration.selectMonth.selectedIndex].value; 68 69 //うるう年に対応出来る月の最終日を取得 70 var lastDate = new Date(Year,Month,0).getDate(); 71 72 var selectElement = document.getElementById("selectDate"); 73 var child; 74 while(child = selectElement.firstChild){ 75 selectElement.removeChild(child); 76 } 77 for(var d = 1; d <= lastDate; d++){ 78 var option = document.createElement("option"); 79 option.value = d; 80 option.text = d; 81 selectElement.appendChild(option); 82 } 83} 84// --> 85 </script> 86 </head> 87 <body bgcolor = "#bce2e8"> 88 89 <form name="registration" method="post" action="" onSubmit="return check()"> 90 <hr width="100%" size="4"> 91 <font size="7" color="#0000ff"><div align=center>情報入力画面</div></font> 92 <hr width="100%" size="4"> 93 <table width="400px" height="60%" border="0" align="center" valign ="middle"> 94 95 <tbody> 96 <tr> 97 <td valign ="middle"> 98 99 100 <div>生年月日<select name="selectYear" id="selectYear" onchange="setSelectMonth()"> 101 </select>年<select name="selectMonth" id="selectMonth" onchange="setSelectDate()"> 102 </select>月<select name="selectDate" id="selectDate"> 103 </select>日</div> 104 <div align="center"><input type="submit" value="登録"</input></div> 105 </td> 106 </tr> 107 </tbody> 108 </table> 109 </form> 110</body> 111 112</html>
修正を行いました。
ここで止まるっていう箇所の内容がselectMonthになっていましたが、
selectYearの移し間違いです。
質問している問題点とは別の単なる質問するときに間違えたミスです。
回答者様が困らない様以後気をつけます(汗)
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/27 09:04