- PR -

javascriptでプルダウン処理

1
投稿者投稿内容
キャンディ
会議室デビュー日: 2007/11/07
投稿数: 4
投稿日時: 2007-11-14 21:21
プルダウンにて年、月、日を選択させて1月を選ぶと31日まで、2月を選ぶと28日まで・・・
というようにメニュー内の値を変化させたいのですが
どのように条件を書けばよろしいのでしょうか?(うるう年対応です)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-14 22:13
引用:

キャンディさんの書き込み (2007-11-14 21:21) より:

プルダウンにて年、月、日を選択させて1月を選ぶと31日まで、2月を選ぶと28日まで・・・
というようにメニュー内の値を変化させたいのですが
どのように条件を書けばよろしいのでしょうか?(うるう年対応です)


うるう年に対応したメソッドをサクっと作ればよろしいのではないでしょうか。

コード:

    function getDaysInMonth(iYear, iMonth) {
        var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

        if ( ((iYear % 4 == 0) && (iYear % 100 != 0)) || (iYear % 400 == 0) ) {
            daysInMonth[1] = 29;
        }

        return daysInMonth[iMonth - 1];
    }


もっとカッコイイ方法がありそうですけど。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
キャンディ
会議室デビュー日: 2007/11/07
投稿数: 4
投稿日時: 2007-11-15 22:36
じゃんぬねっと様ありがとうございます。
おかげで月を選んだ際の日数を得ることができました。
ですがそれをプルダウンメニューに反映させる方法が上手くいきません・・・


<select name="month" onChange="getDaysInMonth()">
で月を選択したらご教授いただいたgetDaysInMonthメソッドを呼び出して値を返しているのですがその直後に

for(var v = 1 ;v <= daysInMonth[iMonth - 1];v++){
document.write("<option value=\"" + v + "\">" + v + "</option>")
}

と書いてプルダウンメニューを作ろうとしたのですがボックス内が真っ白でした。
daysInMonthの中に何も入ってないのでは?と思いメソッドを呼び出す前に
あらかじめ値を格納させておくと格納させた値から変化せずreturnで返した値を持っていないようでした。
また、for文をメソッド内に書くと画面が切り替わって1234・・・というように表示されてしまいます。



私の力では改善方法が分からなかったためどなたかご教授をお願いいたします。
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 2007-11-15 23:28
javascriptを勉強してみてはいかがでしょうか?

コード:
<form action="./example.cgi" method="post" name="myform">
<select name="month" onChange="changeDay(document.myform)">
<option value="1">1</option>
〜途中省略〜
<option value="12">12</option>
</select>
<select name="day">
<option value="1">1</option>
〜途中省略〜
<option value="31">31</option>
</select>
</form>

<script language="javascript">
function getDaysInMonth(iYear, iMonth) {
	var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	if ( ((iYear % 4 == 0) && (iYear % 100 != 0)) || (iYear % 400 == 0) ) {
		daysInMonth[1] = 29;
	}
	return daysInMonth[iMonth - 1];
}

function changeDay(tform){
	var day = getDaysInMonth(2007, tform.month.value );
	tform.day.options.length = 0;
	for( i=1; i<=day; i++ ){
		woption = new Option( i, i );
		tform.day.options[i-1] = woption;
	}
}
</script>



NN4とか古いブラウザだと上手くいかないかも(そのへんの仕様うろ覚え)
上手くいかせる方法もあるけど、ググればすぐに引っかかる(確認済み)なので省略
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2007-11-16 00:53
この会議室はJavaの話題であってJavaScriptは違うと思いますが。。

DOMという機能を使って、HTML要素の書き込みを行います。
量が多いとそれなりに重くなったりするので、
・あらかじめ1〜28日までの日付をプルダウンメニューにHTMLで書いておき、
 月末日の値によって29〜31日のoptionタグを追加。
・あらかじめ1〜31日までの日付をプルダウンメニューにHTMLで書いておき、
 月末日の値によって29〜31日のoptionタグを削除。
という風にループ回数を減らす工夫もあったほうがいいかも。

ただま、やりたいこと丸投げじゃなくてもちっと勉強した方がいいんじゃないかとは
思いますけれども。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-11-16 09:15
あらかじめ1〜28,1〜29,1〜30,1〜31のプルダウンを用意しておき、
月によってそれぞれを表示非表示するという方法も。
非表示時に同時にdisabledにしておけば、送信されるのは一つです。
selectedの処理もしないといけないけど。
OakBow
ベテラン
会議室デビュー日: 2007/09/15
投稿数: 51
投稿日時: 2007-11-16 22:51
>あらかじめ1〜28,1〜29,1〜30,1〜31のプルダウンを用意しておき、
>月によってそれぞれを表示非表示するという方法も。

ああ、そっちの方がより軽くて実装も簡単ですね。
HTML上ではすべてdisable=trueにしておき、必要なプルダウンだけ
JavaScriptでdisable=falseにすることになるかな?
1

スキルアップ/キャリアアップ(JOB@IT)