• 締切済み

Select ボックスで選択した値を渡して、同一ページに再表示するには?

JavaScriptで、年/月をSelectボックスで選択し、 その年/月のカレンダーを同一ページ内に表示したいのですが、 セレクトボックスで値を選択後、カレンダーを同一ページに 表示させる際、再表示時にセレクトボックスが初期状態に 戻ってしまいます。 そのため、カレンダーも初期状態のままのカレンダーのまま変更されません。 どうしたら、値を渡して再表示できるのでしょうか? 方法としましては、自分自身を再呼び込みするといった感じで しか方法が見つかりませんが、別の方法があれば、それでも結構です。 初心者なもので、なにとぞ、よろしくお願いいたします。

みんなの回答

  • xruz
  • ベストアンサー率50% (72/143)
回答No.3

こんにちはPAMchanさん、xruzです。 >どうしてもソースが分かりません。 function setLst() はリストボックスにoptionをセットしています。 function wtCal(cym) はyyyy/mm形式で受けたcymをもとにTableへ日付をセットしています。 (これ以上の説明はとんでもないことになりますので割愛させていただきます) 掲載のソースはフレームを使用していませんし再読込みもしていません。 >参考ページを見てみましたが、フレームについてが掲載されていました。 フレームについて書いてありますがフレームでなくても使えるテクニックです。 リストボックスで得た値をURLの後ろにつけて自分へリンクし、その値を読み込んで カレンダーをdocument.writeすればできると思います。 ただフレーム使用したほうが楽だと思いますが使えない場合もありますので単独の場合のソース例を掲載いたしました。 がんばってくださいね。

  • xruz
  • ベストアンサー率50% (72/143)
回答No.2

こんばんはPAMchanさん、xruzです。 >再表示時にセレクトボックスが初期状態に戻ってしまいます 再表示しているから、そうなりますね。 >自分自身を再呼び込みするといった感じで http://oshiete1.goo.ne.jp/kotaeru.php3?q=159215 が使えると思いますが。。。。 とりあえず再表示せずに表示するサンプルを載せておきます(Ie5.5sp2のみ動作確認) <html> <head> <title>Calender</title> </head> <script language="JavaScript1.3"> <!-- var myDate=new Date(); function setLst() {with(document.frm.lst){ options.length=12;myDate.setDate(1); for(var i=0;i<12;i++){ options[i].text=options[i].value=myDate.getFullYear()+"/"+(myDate.getMonth()+1); myDate.setMonth(myDate.getMonth()+1);} options[0].selected=true;wtCal(options[selectedIndex].value);}} function wtCal(cym) {oTR=document.all('tbl').childNodes[0].childNodes; for(var i=1;i<oTR.length;i++) for(var j=0;j<7;j++) oTR[i].childNodes[j].innerText="";var lym=new Array();lym=cym.split("/"); myDate.setDate(1);myDate.setMonth(lym[1]-1);myDate.setFullYear(lym[0]); for(var i=1;i<oTR.length;i++) { var k=(i>1)?0:myDate.getDay(); for(var j=k;j<7;j++) {var DD=myDate.getDate();oTR[i].childNodes[j].innerText=DD; myDate.setDate(DD+1);if(lym[1]!=(myDate.getMonth()+1)) return;}}} //--> </script> <body onLoad="setLst()"> <form method="post" name="frm"> <select name="lst" size="1" onChange="wtCal(this.options[this.selectedIndex].value);"> </select> </form> <table id="tbl" border="1"> <tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr> </table> </body> </html> がんばってくださいね(きたないソースでごめんなさい)。

PAMchan
質問者

補足

回答ありがとうございます。 回答くださいました、ソースで確認したところ、まさにこれです! すごい! と思いましが、どうしてもソースが分かりません。 参考ページを見てみましたが、フレームについてが掲載されていました。 フレームを使用しているのでしょうか?document.frm.lstとあるし・・・ フレームを使用しているとして、ページは一つでもOKなのでしょうか? フレームがあるとすると、ページが複数必要なのでは?と思うのです。 大変お手数ですが、大まかで結構ですので、もう少し説明をいただけますでしょうか? 本当に申しわけございません。 よろしくお願いいたします。 m(_ _)m

noname#1785
noname#1785
回答No.1

JavaScriptだけで、というのがよくわからないのですが・・・。 セレクトボックスの値がクリアされると言うことは、フォームのアクションかなにかで、再読込してるってことですよね? CGIを使わずに、JavaScriptだけで値の持ち回しをされたいということであれば、難しいかと思います。 もしやるとしたら、クッキーを使う方法でしょうか。 セレクトボックスを選択したときに、Cookieをセットして、次に表示するときにCookieの値を拾ってきて、それと同じ値を持つOptionにSelectedをセットし、カレンダーを表示する・・・といった感じです。

PAMchan
質問者

お礼

JavaScript だけでは、難しいのですね。 それだけ、分かっただけでも進歩のようなきがします。 ありがとうございました。 Cookie でトライしてみようかと思います。

関連するQ&A