下記のような支払スケジュールを登録するフォームがあります。
**************************************
<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やその他方法で行える方法はありますでしょうか?
No.3ベストアンサー
- 回答日時:
>スタッフしか利用しないので大丈夫
であれば、こんなんでどう
><select name="分割回数">
↓↓↓
<select name="分割回数" id="kaisu" onchange="this.form.elements['bunkatu_set'].click()">
ちなみにnameに漢字(バイナリ文字)を使うと思った通りにデータが受け取れない場合があるのでご注意ください
バッチリ動きました!
やはりjavascript便利ですね。
phpばかりでなくjavascriptも頑張って勉強します。
ありがとうございます!
>ちなみにnameに漢字(バイナリ文字)を使うと思った通りにデータが受け取れない場合があるのでご注意ください
承知しており、本番のものは半角英字にしておりますので大丈夫です。お気遣いありがとうございます。
No.5
- 回答日時:
分割回数の選択肢が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['送信区分'] == '分割回数を選んだ') {
_ 分割回数に従った入力欄を生成して画面再描画
}
No.4
- 回答日時:
<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>
No.2
- 回答日時:
自動でサブミットするのはUIとして最悪
自分が承認したつもりもないのにデータが提出されているの許せます?
たとえばajaxで入力欄を呼び出すなどでもよいかも
もしくは一般的な入力欄と分割後の入力をページ分けするとかで対応してください
BtoCのアプリではそういった懸念があることは承知しています。
今回は社内の顧客管理アプリで、スタッフしか利用しないので大丈夫です。
今回の目的は、スタッフの作業効率を少しでも上げるのが目的なので、
ページ別けするとUIが大きく変わり逆に手間が増えてしまうのでダメなのです。
80%は一括での処理なので、そちらには一切変更が無いように改善したいです。
No.1
- 回答日時:
サーバー側にて、回数分の入力欄と一括の入力欄をあらかじめ用意しておき、
<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>
ありがとうございます。
単純なHTMLを切り替えるだけでしたら
それで対応できるのですが、
「//回数分の入力欄を出力」
の部分では、できるだけ入力の手間を省く為に、毎月の支払日のデフォルト(value値)とする日付をphp側で生成しています。
基本となるデフォルトは毎月25日だけど、その日付が祝日や土日である場合は次の平日の日付を算出してvalueに入れて出力するという処理を、12回が選択された場合12回ループ処理しています。
また、回数によって月の支払額を計算し表示しています。
つまり、選んだ回数や元金によって出力するHTMLは変わります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでセレクトボックス...
-
selectを変更不可にしたい
-
【javascript】連想配列からセ...
-
Selectボックスの一覧表示方法
-
VBScriptでHTMLのセレクトボッ...
-
option 選択による表示&非表示
-
1度きりではなく、繰り返し、挙...
-
selectを使った計算
-
selectボックスの選択結果を変...
-
複数のプルダウンを1つにまとめ...
-
【JavaScript】プルダウンで数...
-
全てのselect要素をデフォルト...
-
<input>の選択肢をプルダウンメ...
-
プルダウンの選択内容を次のペ...
-
selectが変更されたらnameを指...
-
javascriptで合計金額を算出し...
-
プルダウンメニューに連動する...
-
2段階連動セレクトボックスでの...
-
【JS】selectでchangeした時の...
-
javascript:データを日本語で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
selectを変更不可にしたい
-
javascriptでセレクトボックス...
-
全てのselect要素をデフォルト...
-
Selectボックスの一覧表示方法
-
リストボックス内の重複したも...
-
プルダウンの値によって活性・...
-
VBScriptでHTMLのセレクトボッ...
-
JavaScriptで<select>の<option...
-
セレクトボックスで配列を呼び...
-
ラジオボタンとプルダウンを連...
-
selectを使った計算
-
select要素のvalueを配列で取得...
-
<input>の選択肢をプルダウンメ...
-
javascriptでoptionタグを削除...
-
今日の日付を自動的にセレクト...
-
検索窓とプルダウンメニュー機...
-
【javascript】連想配列からセ...
-
selectボックスの選択結果を変...
-
同じ名前のセレクトがある場合...
おすすめ情報
「//回数分の入力欄を出力」
の部分では、できるだけ入力者(スタッフ)の手間を省く為に、毎月の支払日のデフォルト(value値)とする日付をphp側で生成しています。
基本となるデフォルトは毎月25日ですが、その日付が祝日や土日である場合は次の平日の日付を算出してvalueに入れて出力するという処理を、12回が選択された場合は12回ループ処理&HTMLで出力しています。
また、回数によって月の支払額を計算し表示しています。
つまり、選んだ回数や元金、回数毎の手数料、消費税によって出力するHTMLは変わりますので、固定のHTML(入力欄)を切り替える方法は使えません。
登録時に80%は一括での登録になる為、フォームにアクセスした段階では、一括用の入力欄を表示しています。
分割で登録する機能は後から出来るだけUI変更が無いように付け足した為、現在の状態になり稼働しています。
今回の目的も、UIは極力変更せずに「反映」というボタンを押す手間を省いて効率化する事にあります。
<INPUT type="submit" name="bunkatu_set" value="反映">
を削除したら動かなくなってしまいました。
このボタンは消せないのでしょうか?