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

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

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

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

Q&A

解決済

6回答

8237閲覧

JavaScriptのプルダウン処理について

anna10

総合スコア24

JavaScript

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

0グッド

4クリップ

投稿2015/03/03 11:00

JavaScriptのうるう年に対応したプルダウン処理についての質問です。
年を選択したら、うるう年の場合は2月は29までとし、
それ以外はその月に合わせた日にちとする、という要素を詰め込みたいのです。

以下が現在のソースとなります。HTML部分が非常に見難く申し訳ありません。

<SCRIPT language="JavaScript"> <!-- //月によって日数を変更する処理 function setDay(year,month,day) { var y = parseInt(document.getElementById(year).value,10); var m = parseInt(document.getElementById(month).value,10); // 閏年判定 if (2 == m && (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))) { //月の最終日の変数 var last = 29; } else { var lastday = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); last = lastday[m-1]; } // 要素取得と初期化 var obj = document.getElementById(day); obj.length = 0; // 日の要素を追加 for (var i = 0; i < last; i++) { obj.options[obj.length++] = new Option(i + 1, i + 1); } } // --> </SCRIPT> <select name="year" id="year" onChange="setDay('year','month','day');">
<% Calendar cl = Calendar.getInstance();%> <% int year = cl.get(Calendar.YEAR); %> <% for(int i=year-40; i<=year-17; i++){ %> </select>年 <select name="month" id="month" onChange="setDay('year','month','day');"> <% for(int i = 1; i <= 12; i++){ %> <option value="<%=i%>"><%=i%></option> <% } %> </select>月 <select name="date" id="date" onChange="setDay('year','month','day');"> <% for(int i = 1; i <= 31; i++){ %> <option value="<%=i%>"><%=i%></option> <% } %> <option value="<%=i%>"><%=i%></option> <% } %> </select>日

最初に設定した時は、うるう年は判定され、又月毎の日にちが選定されたのですが、「何か(この何かが思い出せないのです)」したせいで全く反映されなくなり、堂々巡りとなってしまっています。なのでJavaScriptのうるう年判定のソースが合っているのかも怪しいのですが、反映の仕方を教えて頂けないでしょうか?よろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

luckerさんの指摘が動かない原因だと思います。

動かない原因とは別の話ですが、毎月の最終日は以下の1行で取得できますよ。
閏年でも平年でも問題なく取得できます。

例)2015/2の最終日を取得
new Date(2015, 2, 0).getDate();

※1. Dateオブジェクトの月は0~11になります。そのため例の2は3月を表します。
※2. 0日は存在しないため前月の最終日が返されます。

また、setDay関数を年/月/日プルダウンのonChangeで呼び出すようにしてますが、
日プルダウンのonfocousへの指定だけで実現できると思います。

投稿2015/03/05 15:10

Rasika0222

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

bigfatratさん
luckerさん
の回答に加えて

日を選択するリストボックスには
「onChange="setDay('year','month','day');"」
が必要無いのかもしれません。

日のリストボックス選択時にsetDay関数が動くと
選択したのに1回全部消して、optionが再生成されてしまうので
選択状態が消えているのかも知れません。

投稿2015/03/03 13:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

<select name="date" id="date" onChange="setDay('year','month','day');"> :                                ↑ここが function setDay(year,month,day) { :            ↑ここに入って var obj = document.getElementById(day);    :               ↑ここにきて <select name="date" id="date" onChange="setDay('year','month','day');">               ↑ここ こういう流れですが、onChangeで、'day'を渡して日付を設定しようとしている<select>のidは'date'です…というオチでしょうか?

ですから、

onChange="setDay('year','month','day');
を全て
onChange="setDay('year','month','date');

にすれば動きそうな感じ。

投稿2015/03/03 13:05

編集2015/03/03 13:12
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anna10

2015/03/07 02:39

回答誠にありがとう御座います。ご指摘の通り、私がIDの変数に気が付かず処理を進めていたため不具合が発生していました。現在は無事に作動しております。ありがとう御座いました!
guest

0

jspのコード部分大丈夫でしょうか。
ちゃんとhtmlを生成出来ているか(<select name="year" id="year" ... >の直後のforループ)
あと、javascriptコード部分で変数lastの初期化に関して、スコープ的に定義する位置が良くないのではと・・・。実際、javascriptでは何事もなかったように動いてしまうと思いますが、作法的にどうかと・・・

投稿2015/03/04 07:47

編集2015/03/04 12:45
blackonyx

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

思い当たる節はあるのですが、出力されたHTMLソースを出してくれると検証できると思います。
サーバーサイドスクリプトの部分は関係なさそうなので、ブラウザのソース表示で出てくるものが欲しいです

投稿2015/03/04 03:07

Guu

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

スマホからなのでサンプルソースは書けませんが、

If文のなかでlast変数を宣言すると
その後のlast変数と違う場所を指してるのでは無いでしょうか?
変数宣言をifより前に持ってきてみてください。

投稿2015/03/03 12:23

bigfatrat

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問