- ベストアンサー
カレンダー付き日付入力プログラムの組み込みでエラーが発生する
- カレンダー付き日付入力プログラムをメールフォームに組み込む際にエラーが発生しています。
- 提供されたプログラムを正しく配置し、スクリプトを追加しましたが、カレンダーが表示されずエラーが出ています。
- 他のJavaScriptは正常に動作していますが、このプログラムだけがエラーとなっています。どなたか助けていただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
プロなんですね=> いいえ、昔のプログラミングの経験が少しある程度の 素人です。そんなに詳しくありません。基礎知識レベルです。 あなたのページで何故エラーが出るかはわかりません。残念ながら、ご指導するスキルもありません。 カレンダー表示でカレンダーが出て日付をクリックすると 左の空欄に年月日が入る・・・という風に。 =>無理です。なぜならcalendar.jsは、選んだ日付を一箇所のタグ にしか返してくれないからです。しかも非同期で返ってくるので、 いつタグの値が返されたかハンドリングできません。そこで、カレンダーから 返された値を確認してOKボタンを押し、年、月、日の欄に分解して入れる 仕組みをJAVASCRIPTで追加すれば出来ます。 まる投げのお願い質問は管理人に怒られますが、今回は特別とゆうか うまくヒントを書けないので、以下を参考にソースを研究してください。 (手順) まず、calendar.txtをダウンロードしたら中身をいじらずそのまま calendar.jsに名前を代えて自分のサイトにアップしてください。 オリジナルには<html>や<body>等のタグは無いはずです。 そしたら、<head></head>の中に <script src="./jslib/calendar.js" type="text/javascript" charset="Shift_JIS"></script> と書きます。 その後ろに、新たなJAVASCRIPTを↓のように追記します。 <script type="text/javascript"> //<![CDATA[ function DateSet(){ var setdate = document.getElementById('result').value; document.getElementById('year').value = setdate.substring(0,4); document.getElementById('month').value = Number(setdate.substring(5,7)); document.getElementById('day').value = Number(setdate.substring(8,10)); document.getElementById('result').value =""; } //]]> </script> フォームタグに以下のように名前を付けます(任意の名前でよい) <form action="./postmail.cgi" method="post" name="sendform"> 日付セット部分を以下のようにします。(日の後ろに追記します) </select> 日 <input name="calender" type="button" value="カレンダーから" onClick="wrtCalendar(event,this.form.result,'yyyy/mm/dd');" style="width:80px;height:20px;cursor:pointer;" > <input type="text" name="result" id="result" value="" size="12"> <input type="button" value="OK" onClick="DateSet()" size="2"> ※年、月、日のoption valueを全部"XX"(文字)からXX(数値)にしちゃいました。 <option value="1">1</option> ==> <option value=1>1</option> これは、01~09までの先行0を取り除く処理を作るのが面倒だったので、さぼった訳です。(正規表現で除けるのですが...) ところで、送信先のCGIもあなたが作っているのですか? だとしたら、YYYY/MM/DDの形の日付を受け取る様に改造するだけ ですみますよ。
その他の回答 (2)
- yyr446
- ベストアンサー率65% (870/1330)
<1.calendar.txtをダウンロードし(というかクリックするとテキストファイルが開くので別名で保存し、.jsの拡張子をつけます。 shift-jisで保存しました。> ここの手順がまちがってませんか?あなたのサイトの http://innerrich.com/postmail/arukeru_yoyaku_tesco.htm をFireBugで見ると、calendar.jsの中身に余分な物(hrmlとかbodyとか) がついているようですが、これは根本的な原因では無いです。 あなたのサイトのソースをコピペして調べてみたところ、 calendar.jsを使うときは、formとbuttonタグにname属性が無いと 動かないみたいです。適当な名前aaa,bbbをつけたら出来ました。 FireFox3.0とIE6.0で動作確認しました。 <変更箇所> ======= <form action="./postmail.cgi" method="post" name="aaa"> ======= <option value="30">31</option> </select> 日 <input name="bbb" type="button" value="カレンダー表示" onClick="wrtCalendar(event,this.form._日,'d')" style=" width:100px; height:20px; cursor:pointer;" > ======= このやり方だと、カレンダーから日の欄のセットのみです。 年月日をカレンダーから別々の欄にセットするためには、 さらに工夫する必要がありますね。
- yyr446
- ベストアンサー率65% (870/1330)
日の横の欄 <input type="button" name="Calendar" value="カレンダー表示" onClick="wrtCalendar(event,this.form._日,'d')" style="background-image: url(calendar.gif); background-color:#ffffff; width:20px; height:20px; border:0; cursor:pointer;" >
補足
ありがとうございます。 教えていただいたとおりやってみたんですがやっぱり 「ページでエラーが表示されました」と 出てしまいます・・・。
補足
すごい・・・ すごい人ですね。あっさりできてしまうのですね。 (何のお仕事なんでしょう。きっとプロなんですね) やってみるけどできません・・・またエラーが出ちゃいます。 あほな子ですみません。 calendar.jsの中身のhrmlとかbodyタグは消しても大丈夫なんですか? こわくて触れませんでした。 一番最初のフォームにも名前をつけるんですね。 こういう形にしたいのです。 http://innerrich.com/postmail/arukeru_yoyaku_tesco.htm カレンダー表示でカレンダーが出て 日付をクリックすると 左の空欄に年月日が入る・・・という風に。 何度も甘えてばっかりですみません! どうか教えてください。