• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Formにインデックスの値を渡したい)

Formにインデックスの値を渡す方法とは?

このQ&Aのポイント
  • JavascriptとFormを使用して伝票の発行を行おうとしています。
  • ダイアログを開き、その中から伝票の種類を選択し、Formに値を渡したいです。
  • 現在、checkSubmitPrintSlip()関数がtrueを返すため、値を取得できない状態になっています。どのようにすれば値を取得してFormに返すことができるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • byDesign
  • ベストアンサー率75% (45/60)
回答No.2

res += '伝票発行を行います。伝票種を選択してください。' + '<form method="post" action="/printSrip" onsubmit="return choiseFormId();">' // ★変更 + '<select name="choiseSlipName">' + '<option value="111">佐川急便</option>' + '<option value="112">佐川急便 個数タグ</option>' + '<option value="113">ヤマト運輸</option>' + '<option value="114">ヤマト運輸 コレクト</option>' + '</select>' + '<input type="hidden" name="slipFormId" />' // ★追加 + ' <input type="hidden" value="伝票発行" /> // ★追加 + '<input type="submit" value="選択" >' // ★変更 + '<form>'; //★の部分を変更(追加)すればよいのではないでしょうか?(変更2箇所・追加2箇所) 伝票発行の選択時にsubmitしたいわけですよね? でしたら、その場所でsubmitすれば良いだけなのではないでしょうか? それとも何か戻さないといけない理由があるのでしょうか?

coonyanp
質問者

お礼

byDesignさん、ご丁寧な説明ありがとうございました。 私が「戻る」ことにこだわったのは最初の起点となる<form name="fmPrintSlip">に戻さないと処理できないと考えたからです。 Formが2個あってはダメだ、と頭から離れなかったためです。 byDesignさんの指摘されたように、submitする場所を伝票種の選択のところにすればいいわけですね。 目からウロコがとれた感じでした。 それで、最初のFormの方はボタンだけにして、あとの方のFormで送信することによってうまくいきました。 本当にありがとうございまました。 大助かりです。

その他の回答 (2)

  • byDesign
  • ベストアンサー率75% (45/60)
回答No.3

どうしても戻したい場合は、以下のようにすれば良いと思います 1.checkSubmitPrintSlip()内で伝票種類があればtrue/なければダイアログをだしてfalse 2.choiseFormIdで伝票種類をセットしてsubmit function checkSubmitPrintSlip(){ var slipFormId = $("#slipFormId").val(); if(slipFormId){ return true; } var res = ''; res += '伝票発行を行います。伝票種を選択してください。<br />' + '<select name="choiseSlipName">' + '<option value="1">納品書1</option>' + '<option value="2">納品書2</option>' + '<option value="3">受注票</option>' + '<option value="4">配送伝票</option>' + '</select>' + '<input type="button" value="選択" onclick="choiseFormId();">'; // var space = document.getElementById("dataSlipDialog"); space.innerHTML = res; alert('aa') return false; } function choiseFormId(){ var atai = $("select[name='choiseSlipName']").val(); $("#slipFormId").val(atai); $("[name='fmPrintSlip']").submit(); } // ダイアログの部分はカットしているので、適当に入れてください。 サンプルです https://jsfiddle.net/4knxmzvm/1/

  • byDesign
  • ベストアンサー率75% (45/60)
回答No.1

伝票種類の選択をformで囲む(他送るものがあればhiddenでセット) choiseFormId()のボタンtypeをsubmitに変更 choiseFormId()をonsubmitに移動 でどうでしょうか?

coonyanp
質問者

お礼

byDesignsann、早速の回答ありがとうございました。 ご指摘のとおり以下のように<form>でくくり、buttonをsubmitに変えてみましたが変化はありませんでした。<form>のnameもないし、action先もなくてよかったんでしょうか。 やはり「true」なのでもとのFormにIDが送信されないので、正しく処理できません。 var res = ''; res += '伝票発行を行います。伝票種を選択してください。' + '<form>' + '<select name="choiseSlipName">' + '<option value="111">佐川急便</option>' + '<option value="112">佐川急便 個数タグ</option>' + '<option value="113">ヤマト運輸</option>' + '<option value="114">ヤマト運輸 コレクト</option>' + '</select>' + '<input type="submit" value="選択" onsubmit="choiseFormId();">' + '<form>'; // 検索条件のコンボボックスに「伝票種類」をセット var space = document.getElementById("dataTableDeliverySlipDialog"); space.innerHTML = res; 私の説明が中途半端だったのかもしれません。<form name="fmPrintSlip">の送信で発行処理せる際に、onsubmit="return checkSubmitPrintTransportSlip();" に飛び、モーダルダイアログを開いて一覧表示された伝票を選択させ、その伝票のIDを<form name="fmPrintSlip">に戻して送信処理させようとしたものです。 説明が足りなかったようで申し訳ありません。

関連するQ&A