質問: formで特定のinputを送信しないようにしたい 複数のinputを送信時に値をフォーマットに従ってまとめて送信するとき そのもととなった複数のinputは送信しないようにしたいです (郵便番号など入力欄を二つにわけるが送信時は一つにまとめるなど) nameを付けないという方法も考えましたが radioを含む場合に不都合なのでこの方法はとりたくありません また送信時にinputを削除するという方法も ajaxで元のページにとどまることも考えうるので この方法もとりたくありません 理想はinputに特定の属性値を与えると form送信時に送信しないようになる とかだったのですがその方法は見つけられませんでした クライアントサイドでの処理が難しそうなら サーバーサイドでの処理にしますが できれば避けたいと思っています よろしくお願いします
回答: そもそもサーバー側の正しいあり方として 「関係のないデータは無視する」のはずなので、 無関係なデータを送信しても、なんの問題もないとは思うのですが。 サーバー側で何とかするならば 処理に関係ない入力欄の name を notdata_ で始まる命名とする サーバー側で notdata_ で始まる引数は処理しない汎用ルールを追加 例) 郵便区番号: notdata_postalcode3 クライアント側で何とかするならば // フォームをdom上で生成して値を設定して送信して即廃棄する方法 // 通常通り画面遷移して、元のフォームも汚さない 元のフォーム.addeventlistener('submit', function(event){ var data = フォームの値を読み取る(元のフォーム); var form = document.createelement('form'); form.action = 元のフォーム.action; form.method = 元のフォーム.method; for (var name in data) { var hidn = form.appendchild(document.createelement('input')); hidn.type = 'hidden'; hidn.name = name; hidn.value = data[name]; // todo:複数選択可能なリスト入力に対応 } form.submit(); }, false);