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

こんばんは。
タイトルの通り、ショップのカートにある配送希望日のプルダウン
例えば・・・
「3日後から14日後の間で指定」としていたら
プルダウンに今日(3月25日(水))から14日後までの日付が入ったプルダウンが表示されるようなselectボックスを作るにはどうすればよいでしょうか?
javascriptのカレンダーを取り入れようとしてみたのですが、どうにも上手く行かないので教えてください。

A 回答 (17件中11~17件)

<input type="hidden" id="そのままに" name="CGIに渡す名前">


idとnameはそれぞれ指定できる

もしくは、スクリプトで、月と日に分ける?

この回答への補足

いいえ。
_pipi_さんのスクリプトが使えるのであれば分けません。
idをtoday_from_serverのまま、nameをつけると確認画面では2009/2/27となり、idもnameもつけるとフォームの方が○日後という表示になります。
<select>にnameをつけると、確認画面に○日後の○が表示されます。

補足日時:2009/03/27 10:25
    • good
    • 0

メールフォームcgiがどうなっているかわからない。


hidden ではなくtextにして、display:noneにするとか?
なんとも・・・

この回答への補足

textにしてみたときは2009/2/26と表示されたテキストボックスが表示されました。display:noneですね。
それもしてみます。
CGIはフリーのahrefのものでフォームのname定義されたものを確認画面・メールに表示するタイプのものです。
それで、現段階で私がしていたのはselctで月・日を選べるようにしていたのですが、それだと確認画面やメールで月と日がばらばらに表示されるのです。当たり前なのですが。
○月○日と合成させたものを表示させることは出来ますが、ばらばらの値までも表示されてしまうので、どうすれば良いかと考えあぐね、ご質問差し上げたしだいです。
_pipi_さんのご回答をヒントにもう少し調べてみます。

補足日時:2009/03/26 19:52
    • good
    • 0
この回答へのお礼

display:noneにしてみたり色々試してみましたが、見たままの値をCGIに渡すことができません。
_pipi_さんの書いて下さったscriptをすっっっごく使いたいけど諦めるより他ないのでしょうか・・・

お礼日時:2009/03/27 09:29

スクリプト側の補正をしなくてすむように変更


日付の区切り文字の追加
value="" にしました。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>SetSelectTag</title>
<body>
<form>
<p>
<input type="hidden" id="today_from_server" value="">
<select id="after_day">
 <option value="">配送希望日</option>
 <option value="3">3日後</option>
 <option value="4">4日後</option>
 <option value="5">5日後</option>
 <option value="6">6日後</option>
 <option value="7">7日後</option>
 <option value="8">8日後</option>
 <option value="9">9日後</option>
 <option value="10">10日後</option>
 <option value="11">11日後</option>
 <option value="12">12日後</option>
 <option value="13">13日後</option>
 <option value="14">14日後</option>
</select>
</p>
</form>
<script type="text/javascript">
//@cc_on
//全角空白はタブまたは半角空白に置き換えのこと

(function (init) {
 /*@if(@_jscript)
  document.attachEvent && attachEvent('onload', init);
 @else@*/
  document.addEventListener && addEventListener('load', init, false);
 /*@end@*/
})(function () {
 var today = new Date;
 var d, o, w;
 var date_val = [];
 var date_str = document.getElementById('today_from_server').value;
 var count = 1;
 var the_options = document.getElementById('after_day').options;
 
 if (date_str) {
  date_val = date_str.split(/[\/\- ]/g);
  --date_val[1];
 } else {
  date_val = [today.getFullYear(), today.getMonth(), today.getDate() ];
  document.getElementById('today_from_server').value = date_val.join('/');
 }
 while (o = the_options[count++]) {
  d = new Date(date_val[0], date_val[1], parseInt(date_val[2]) + parseInt(o.value));
  w = d.getDay();
  o.text = (d.getMonth() + 1) + '月' + d.getDate() + '日(' + '日月火水木金土'.substr(w,1) + ')';
  o.style.backgroundColor = '#'+['fdd','fff','ddf'][1-!w+(w==6)]
 }
});
</script>

この回答への補足

素晴らしいですね。表示された途端ため息が出ました。
途中不快な気分を味あわせてしまいましてすみません。
しかし、hiddenの場合メールフォームcgiだと確認画面やメールに表示されませんよね。(実行してみました。分からないけれども、nameを与えたりするとおかしなことになってしまいました。)
何か方法はありますか?

補足日時:2009/03/26 17:21
    • good
    • 0

何日後? 実行しもしないで発言しているのですか?


ちゃんと書き換えてます。

自分も勉強している身なので、たいそうなことも言えませんし、
自分の書いたコードが、あなたのためになるかどうかなど、
私には関係ありません。

javascriptはページを閲覧したパソコンの時計を基準にしています
なので、type=hidden のところにサーバー側の時間を "年/月/日" で
指定しておかないと、ずれる可能性があります
その部分の記載がなければスクリプトが代替処理をしています
あくまでもjavascriptが動作しない環境のことをちょっとだけ
考えました。

この回答への補足

いえ、実行してみたのです。
そうしたら○日後と表示されていたので。
私の無知から来たことで、大変申し訳ありませんでした。

補足日時:2009/03/26 16:53
    • good
    • 0

私は答えのコードは書かないわよ。


書くのはあなた。
添削ならいくらでもしてあげるけど。

あせっている暇があったら1行でもコーディングするのよ。
脳汁出し切って考えるの。
そうやって努力したことって
のちのちすごく役に立つわ。
他人に教わってもそのときだけ。

期限が何なのか知らないけど
自分のために勉強するんじゃないの?
期限のために勉強するならやめてしまいなさい。

なんてえらそうなことは今だからいえるんだけどね。
教えたサイト
http://www.red.oit-net.jp/tatsuya/java/gyouji2.htm
には今日の日付の出し方、明日の日付の出し方が書かれているわ。
ということは14日後まで出せるわよね?
あとはプルダウンをJavaScriptで記述するだけよ。
<option>の入れ替えは
http://blog.justoneplanet.info/2007/12/11/select …
この辺りを参考にしてはどおかしら。

この回答への補足

確かに。
私も同じことを言うでしょうから、納得できます。
参考URL(特にoptionをjavascriptで入れ替えるなんてことが出来るんですね)で勉強します。
どのみち勉強しなくてはならなくなってくるだろうと思いますので。
今回は本当に時間が限られているため、何とか間に合わせることに専念します。
今後修正が出来るので、勉強後、さらにフォームを磨いていきます。

補足日時:2009/03/26 14:59
    • good
    • 0

//@cc_on


(function (init) {
/*@if(@_jscript)
document.attachEvent && attachEvent('onload', init);
@else@*/
document.addEventListener && addEventListener('load', init, false);
/*@end@*/
})(function () {
var today = new Date;
var d, o, w;
var date_val = [];
var date_str = document.getElementById('today_from_server').value;
var the_date;
var start = 3;
var period = 14;
var count;
var the_options = document.getElementById('after_day').options;

if (date_str) {
date_val = date_str.split(/[\/]/g);
--date_val[1];
} else {
date_val = [today.getFullYear(), today.getMonth(), today.getDate() ];
document.getElementById('today_from_server').value = date_val.join('/');
}
for (count = 0; count <= period - start; count++) {
d = new Date(date_val[0], date_val[1], parseInt(date_val[2]) + count + start);
o = the_options[count + 1];
w = d.getDay();
o.text = (d.getMonth() + 1) + '月' + d.getDate() + '日(' + '日月火水木金土'.substr(w,1) + ')';
o.style.backgroundColor = '#'+['fdd','fff','ddf'][1-!w+(w==6)]
}
});
</script>

<input type="hidden" id="today_from_server" value="1996/3/4">
<select id="after_day">
<option value="">配送希望日</option>
<option value="3">3日後</option>
<option value="4">4日後</option>
<option value="5">5日後</option>
<option value="6">6日後</option>
<option value="7">7日後</option>
<option value="8">8日後</option>
<option value="9">9日後</option>
<option value="10">10日後</option>
<option value="11">11日後</option>
<option value="12">12日後</option>
<option value="13">13日後</option>
<option value="14">14日後</option>
</select>

この回答への補足

_pipi_さん、有難うございます。
ただ当初の質問の通り、○日後という表示でなく、3日後から14日後までの日付"を表示させたいのです。
お手を煩わせ申し訳ありませんが、お願いいたします。

補足日時:2009/03/26 11:35
    • good
    • 0

まず


今日の日付、明日の日付の出し方の参考
http://www.red.oit-net.jp/tatsuya/java/gyouji2.htm

もちろん単に25に+1ずつしていってもいいけど
月の変わり目とかうるう年とか面倒だと思うので
このやり方をすればそこを考慮しなくてよくなるね。

もちろん月の変わり目とかをきちんと判定してやるのが
軽い処理ではあるんだけど
ミスが起こるよりはいいと思うわ。

この回答への補足

確かに・・・
こちらのサイトは私も何度か拝見しております。
使えるなぁと思うのですが。
ただ全くいじったことがないjavascriptで、期限を間近にして勉強がはかどらず焦っておりますT_T

補足日時:2009/03/26 13:14
    • good
    • 0

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