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

下記のような支払スケジュールを登録するフォームがあります。

**************************************
<form method="post" name="calendar_add" action="">
<input type="text" name="名前" value=""><br>
<input type="text" name="金額" value=""><br>

<select name="分割回数">
<option value="" selected="selected">一括</option>
<option value="2">2回</option>
<option value="3">3回</option>
<option value="4">4回</option>
<option value="5">5回</option>
<option value="6">6回</option>
<option value="12">12回</option>
<option value="24">24回</option>
<option value="36">36回</option>
</select>
<INPUT type="submit" name="bunkatu_set" value="反映"><br>
変更したら「反映」を先に押して下さい。<br>

<?php
if($_POST["bunkatu_set"]){
//回数分の入力欄を出力
}else{
//一括の入力欄を出力
}
?>

<input type="submit" name="kakunin" value="登録確認">
</form>
**************************************


現在は分割回数を変更した後、「反映」を押してもらい入力欄の生成をしていますが、
プルダウン(select)を変更した場合は自動的に「name="bunkatu_set"」でsubmitしたいです。
javascriptやその他方法で行える方法はありますでしょうか?

質問者からの補足コメント

  • 「//回数分の入力欄を出力」

    の部分では、できるだけ入力者(スタッフ)の手間を省く為に、毎月の支払日のデフォルト(value値)とする日付をphp側で生成しています。

    基本となるデフォルトは毎月25日ですが、その日付が祝日や土日である場合は次の平日の日付を算出してvalueに入れて出力するという処理を、12回が選択された場合は12回ループ処理&HTMLで出力しています。
    また、回数によって月の支払額を計算し表示しています。

    つまり、選んだ回数や元金、回数毎の手数料、消費税によって出力するHTMLは変わりますので、固定のHTML(入力欄)を切り替える方法は使えません。

      補足日時:2016/02/09 17:38
  • うーん・・・

    登録時に80%は一括での登録になる為、フォームにアクセスした段階では、一括用の入力欄を表示しています。

    分割で登録する機能は後から出来るだけUI変更が無いように付け足した為、現在の状態になり稼働しています。

    今回の目的も、UIは極力変更せずに「反映」というボタンを押す手間を省いて効率化する事にあります。

      補足日時:2016/02/09 18:05
  • うーん・・・

    <INPUT type="submit" name="bunkatu_set" value="反映">

    を削除したら動かなくなってしまいました。

    このボタンは消せないのでしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/02/09 18:35

A 回答 (5件)

>スタッフしか利用しないので大丈夫



であれば、こんなんでどう

><select name="分割回数">
↓↓↓
<select name="分割回数" id="kaisu" onchange="this.form.elements['bunkatu_set'].click()">

ちなみにnameに漢字(バイナリ文字)を使うと思った通りにデータが受け取れない場合があるのでご注意ください
この回答への補足あり
    • good
    • 0
この回答へのお礼

バッチリ動きました!
やはりjavascript便利ですね。
phpばかりでなくjavascriptも頑張って勉強します。
ありがとうございます!

>ちなみにnameに漢字(バイナリ文字)を使うと思った通りにデータが受け取れない場合があるのでご注意ください

承知しており、本番のものは半角英字にしておりますので大丈夫です。お気遣いありがとうございます。

お礼日時:2016/02/09 18:30

分割回数の選択肢が10個程度なら、全部計算して表示させても性能的に問題ない気がしますが、


ご希望に沿う形で処理させるなら

クライアント側
<script>
function 分割を選んだ(sel) {
_ var form = sel.form;
_ form.elements['送信区分'].value = '分割回数を選んだ';
_ form.submit();
}
</script>
<form action=ほげ>
<input type=text name=金額> ...
<select name=分割回数 onchange='分割を選んだ(this)'> ... </select>
<!-- 分割回数に従った入力欄 -->
<input type=hidden name=送信区分 value=登録確認を押した>
<input type=submit value=登録確認>
</form>

サーバー側
if ($_POST['送信区分'] == '登録確認を押した') {
_ 登録処理
}
if ($_POST['送信区分'] == '分割回数を選んだ') {
_ 分割回数に従った入力欄を生成して画面再描画
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。
次に類似するシステムを作る際は念頭に入れて仕様を考えたいと思います。

お礼日時:2016/02/16 11:25

<INPUT type="submit" name="bunkatu_set" value="反映">


↓↓↓
<INPUT type="submit" name="bunkatu_set" value="反映" style="display:none">

とするとか・・・
まぁsubmitを表示しないなら、bunkatu_setをhiddenで受け渡すとか・・・・

<form>
<input type="text" name="名前" value=""><br>
<input type="text" name="金額" value=""><br>
<select name="分割回数" id="kaisu" onchange="this.form.submit()">
<option value="" selected="selected">一括</option>
<option value="2">2回</option>
<option value="3">3回</option>
<option value="4">4回</option>
<option value="5">5回</option>
<option value="6">6回</option>
<option value="12">12回</option>
<option value="24">24回</option>
<option value="36">36回</option>
</select>
<INPUT type="hidden" name="bunkatu_set" value="反映">
</form>
    • good
    • 0
この回答へのお礼

ありがとうございます。
style="display:none"
で対処しました。

これは使えますね。
勉強になりました。

お礼日時:2016/02/16 11:24

自動でサブミットするのはUIとして最悪


自分が承認したつもりもないのにデータが提出されているの許せます?

たとえばajaxで入力欄を呼び出すなどでもよいかも
もしくは一般的な入力欄と分割後の入力をページ分けするとかで対応してください
    • good
    • 0
この回答へのお礼

BtoCのアプリではそういった懸念があることは承知しています。

今回は社内の顧客管理アプリで、スタッフしか利用しないので大丈夫です。

今回の目的は、スタッフの作業効率を少しでも上げるのが目的なので、
ページ別けするとUIが大きく変わり逆に手間が増えてしまうのでダメなのです。

80%は一括での処理なので、そちらには一切変更が無いように改善したいです。

お礼日時:2016/02/09 17:30

サーバー側にて、回数分の入力欄と一括の入力欄をあらかじめ用意しておき、


<select> が change イベントを発生させた際に表示を切り替えるだけ
の方法をオススメします。

<script>
function 分割を選んだ(sel){ document.getElementById(表示させたい要素のid).style = 'display:block'; }
</script>
<select onchange='分割を選んだ(this)'>..</select>
<div id=回数分の入力欄 style='display:none'> ... </div>
<div id=一括の入力欄 style='display:none'> ... </div>
    • good
    • 0
この回答へのお礼

ありがとうございます。

単純なHTMLを切り替えるだけでしたら
それで対応できるのですが、

「//回数分の入力欄を出力」

の部分では、できるだけ入力の手間を省く為に、毎月の支払日のデフォルト(value値)とする日付をphp側で生成しています。
基本となるデフォルトは毎月25日だけど、その日付が祝日や土日である場合は次の平日の日付を算出してvalueに入れて出力するという処理を、12回が選択された場合12回ループ処理しています。
また、回数によって月の支払額を計算し表示しています。

つまり、選んだ回数や元金によって出力するHTMLは変わります。

お礼日時:2016/02/09 17:22

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