oooooooooooooooooooooooooooooooooooooooooooo
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
onChange="selectDay(<% bean.getYear(),bean.getMonth(),bean.getDay() %>)"
の部分で、JavaScriptに対して、JSPから値を正しく出力できてないのでは。
<%= %> で値を出力するか、ELを使って個別に出力すれば実現できるでしょう。
onChange="selectDay(<%= bean.getYear() %>,<%= bean.getMonth() %>,<%= bean.getDay() %>)"
しかしJSPの式で3つ書くのはややタイヘンですね。<%= bean.getYear() %> は ${bean.year} と書けますのでELを使った書き方も検討されるのも良いでしょう。
JSP内で記載されるJavaScriptは JSPから出力された後にブラウザが実行する 前提を忘れなければ、処理順や書き方のヒントになりますね。
投稿2016/07/12 14:59
総合スコア12011
0
ベストアンサー
JSPはよくわかりませんが、JavaScript部分が動かない書き方だったので、書き直してみました。
下記の2012
のところを var inputyear = <%= bean.getYear() %>;
みたいにすれば望まれる挙動になるのではないかと思います。
動くサンプル:https://jsfiddle.net/hyun6d02/
HTML
1<form method="post" action="servlet" name="form" id="form"> 2 <select name="year" id="year" onChange="selectMonth()"></select>年 3 <select name="month" id="month" onChange="selectDay()" ></select>月 4 <select name="day" id="day"></select>日 5</form>
JavaScript
1window.onload = function() { 2 var inputyear = 2012; // <%= bean.getYear() %> 3 var inputmonth = 7; // <%= bean.getMonth() %> 4 var inputday = 8; // <%= bean.getDay() %> 5 selectYear( inputyear, inputmonth, inputday ); 6}; 7function filter_int( num, sub ) { 8 num = parseInt( num, 10 ); 9 return ( !isNaN( num ) ) ? num : ( ( sub ) ? filter_int( sub ) : null ); 10} 11function selectYear( inputyear, inputmonth, inputday ) { 12 inputyear = filter_int( inputyear ); 13 inputmonth = filter_int( inputmonth, document.getElementById( 'month' ).value ); 14 inputday = filter_int( inputday, document.getElementById( 'day' ).value ); 15 16 //今年を取得 17 var nowYear = ( new Date() ).getFullYear(); 18 19 //yearオブジェクトの取得 20 var objY = document.getElementById( 'year' ); 21 22 //年を表示(今年からマイナス10年前まで) 23 for ( var i = 0; i <= 10 ; i++ ) { 24 objY.options[ i ] = new Option( nowYear - i, nowYear - i, ( nowYear - i === inputyear ) ); 25 } 26 27 selectMonth( inputmonth, inputday ); 28} 29 30function selectMonth( inputmonth, inputday ) { 31 inputmonth = filter_int( inputmonth, document.getElementById( 'month' ).value ); 32 inputday = filter_int( inputday, document.getElementById( 'day' ).value ); 33 34 //monthオブジェクトを取得 35 var objM = document.getElementById( 'month' ); 36 37 //monthオブジェクトに月optionを追加 38 for ( var i = 0; i <= 11; i++ ) { 39 objM.options[ i ] = new Option( i + 1, i + 1, ( i + 1 === inputmonth ) ); 40 } 41 42 selectDay( inputday ); 43} 44 45//日の要素を作成 46function selectDay( inputday ) { 47 inputday = filter_int( inputday, document.getElementById( 'day' ).value ); 48 49 //年と月を取得 50 var sYear = filter_int( document.getElementById( 'year' ).value ); 51 var sMonth = filter_int( document.getElementById( 'month' ).value ); 52 53 //月の最終日:閏年用 54 var last; 55 56 //閏年判定 57 if ( 2 == sMonth && ( sYear % 400 === 0 || ( sYear % 4 === 0 && sYear % 100 !== 0 ) ) ) { 58 last = 29; 59 } else { 60 last = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ][ sMonth - 1 ]; 61 } 62 63 //要素の初期化 64 var objD = document.getElementById( 'day' ); 65 objD.length = 0; 66 67 //選択した月に応じた日の要素を追加 68 for ( var i = 0; i <last; i++ ) { 69 objD.options[ i ] = new Option( i + 1, i + 1, ( i + 1 === inputday ) ); 70 } 71}
投稿2016/07/13 06:59
編集2016/07/14 02:14総合スコア69398
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/14 02:28 編集
2016/07/18 02:12
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/12 16:00
2016/07/13 04:57
2016/07/13 19:15
2016/07/14 01:17