4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

いろんなForm処理

Last updated at Posted at 2020-09-01

SPAばっかり書いていると、すこーし昔な感じの form を使った処理を忘れがちにしてしまいます。
私の備忘録として残すとともに、いろいろな form の書き方を見比べてみましょう。

1. 一般的な form 処理

<form id="formId" name="formName" method="post" action="foo/index.php" >
  <label for="sei">姓:</label>
  <input id="sei" type="text" name="sei">
  <label for="mei">名:</label>
  <input id="mei" type="text" name="mei">
  <button>登録する</button>
</form>

よく見るやつです。
とくに難しいことはしていません。

2. form 要素の外にボタンを置いて、form を実行

<form id="formId" name="formName" method="post" action="foo/index.php" >
  <label for="sei">姓:</label>
  <input id="sei" type="text" name="sei">
  <label for="mei">名:</label>
  <input id="mei" type="text" name="mei">
</form>

<p>ボタンを押して登録しよう!</p>
<button type="submit" form="formId">登録する</button>

form の外に追いやってボタンを設定するケースです。こちらは、 button 要素に form 属性を指定することで、 form 内に button を配置したときと同じことができます。

3. from の外にパラメータを配置して、form を実行する

<form id="formId" name="formName" method="post" action="foo/index.php"></form>

<label for="sei">姓:</label>
<input id="sei" type="text" name="sei" form="formId" />
<label for="mei">名:</label>
<input id="mei" type="text" name="mei" form="formId" />

<p>ボタンを押して登録しよう!</p>
<button type="submit" form="formId">登録する</button>

これはあまり見かけないかもしれませんが、知っておくと役に立つかもしれません。
注目してもらいたいのは、 input 要素のに form 属性を設定していることです。
こうすることで、 form の外にはみ出した要素があったとしても、それを form のパラメータとして含めることができます。
ただし、IEでは使えないという話も聞くので、実装については検討してから導入しましょう。

4. javascript で form を実行

<script>
var submit = function() {
  var form = document.getElementById('formId');
  form.action = "foo/index.php"
  form.method = "post";
  form.submit();
}
</script>

<form id="formId" name="formName">
  <label for="sei">姓:</label>
  <input id="sei" type="text" name="sei" />
  <label for="mei">名:</label>
  <input id="mei" type="text" name="mei" />
  <button onclick="submit()">登録する</button>
</form>

たまにこういう実装している箇所があるかもしれません。
button 要素に onclick のイベントハンドラを仕掛けます。クリック時には submit 関数が呼ばれて、 form 処理を実行します。

5. javascript で form を実行 -その2-

<script>
var submit = function() {
  var form = document.formName;
  form.action = "foo/index.php"
  form.method = "post";
  form.submit();
}
</script>

<form id="formId" name="formName">
  <label for="sei">姓:</label>
  <input id="sei" type="text" name="sei" />
  <label for="mei">名:</label>
  <input id="mei" type="text" name="mei" />
  <button onclick="submit()">登録する</button>
</form>

4と同じように見えるのですが、今回は document.getElementById は使わずに、 DOM生成時に document オブジェクトに formName がぶら下がるのを利用して form 処理の実行を行っています。

conclusion

というわけで、一概に form 処理といってもそこそこあります。 HTML の世界で完結させるのか、 JavaScript も交えた世界とするのか、どういう実装が良いかを、システムの要件にしたがって適切に選択していきましょう。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?