アプリ版:「スタンプのみでお礼する」機能のリリースについて

JavaScriptで、年/月をSelectボックスで選択し、
その年/月のカレンダーを同一ページ内に表示したいのですが、
セレクトボックスで値を選択後、カレンダーを同一ページに
表示させる際、再表示時にセレクトボックスが初期状態に
戻ってしまいます。
そのため、カレンダーも初期状態のままのカレンダーのまま変更されません。

どうしたら、値を渡して再表示できるのでしょうか?
方法としましては、自分自身を再呼び込みするといった感じで
しか方法が見つかりませんが、別の方法があれば、それでも結構です。
初心者なもので、なにとぞ、よろしくお願いいたします。

A 回答 (3件)

こんにちはPAMchanさん、xruzです。


>どうしてもソースが分かりません。
function setLst() はリストボックスにoptionをセットしています。
function wtCal(cym) はyyyy/mm形式で受けたcymをもとにTableへ日付をセットしています。
(これ以上の説明はとんでもないことになりますので割愛させていただきます)
掲載のソースはフレームを使用していませんし再読込みもしていません。

>参考ページを見てみましたが、フレームについてが掲載されていました。
フレームについて書いてありますがフレームでなくても使えるテクニックです。
リストボックスで得た値をURLの後ろにつけて自分へリンクし、その値を読み込んで
カレンダーをdocument.writeすればできると思います。

ただフレーム使用したほうが楽だと思いますが使えない場合もありますので単独の場合のソース例を掲載いたしました。

がんばってくださいね。
    • good
    • 1

こんばんは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>

がんばってくださいね(きたないソースでごめんなさい)。

この回答への補足

回答ありがとうございます。
回答くださいました、ソースで確認したところ、まさにこれです!
すごい! と思いましが、どうしてもソースが分かりません。

参考ページを見てみましたが、フレームについてが掲載されていました。
フレームを使用しているのでしょうか?document.frm.lstとあるし・・・
フレームを使用しているとして、ページは一つでもOKなのでしょうか?
フレームがあるとすると、ページが複数必要なのでは?と思うのです。

大変お手数ですが、大まかで結構ですので、もう少し説明をいただけますでしょうか?
本当に申しわけございません。 よろしくお願いいたします。
m(_ _)m

補足日時:2001/10/31 09:40
    • good
    • 0

JavaScriptだけで、というのがよくわからないのですが・・・。


セレクトボックスの値がクリアされると言うことは、フォームのアクションかなにかで、再読込してるってことですよね?
CGIを使わずに、JavaScriptだけで値の持ち回しをされたいということであれば、難しいかと思います。
もしやるとしたら、クッキーを使う方法でしょうか。

セレクトボックスを選択したときに、Cookieをセットして、次に表示するときにCookieの値を拾ってきて、それと同じ値を持つOptionにSelectedをセットし、カレンダーを表示する・・・といった感じです。
    • good
    • 0
この回答へのお礼

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

Cookie でトライしてみようかと思います。

お礼日時:2001/10/31 09:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!