LoginSignup
10
6

More than 3 years have passed since last update.

フォームの入力欄を動的に追加する

Last updated at Posted at 2020-08-14

はじめに

独学でプログラミングを学習中の大学3年生です。
今回が初投稿になります。

フォームの値を配列で受け取るときに入力欄を動的に追加したいことがあったので、
調べてまとめてみました。
初学者にも分かりやすいように、できるだけ簡潔なコードになるよう心がけています。

CodePen

以下のページで動作を確認できます。
コードも見やすいかもしれません。
https://codepen.io/yuji-207/pen/OJNMYgv

コード

form.html
<form action="" method="">
    <input type="text" name="text[]" class="text"></input>
    <button type="button" class="btn-clone">clone</button>
    <button type="button" class="btn-remove">remove</button>
    <button type="submit"></button>
</form>

バックエンドで配列textとしてデータを受け取れます。

stylesheet.css
input, button {
    display: block;
}

.btn-remove {
    display: none;
}

入力欄の削除ボタンはデフォルトで非表示にしておきます。

script.js
$(function() {

    // button
    var btn_clone = $('.btn-clone');  // 追加ボタン
    var btn_remove = $('.btn-remove');  // 削除ボタン

    // clone
    btn_clone.click(function() {

        var text = $('.text').last();  // 最後尾にあるinput

        text
          .clone()  // クローン
          .val('')  // valueもクローンされるので削除する
          .insertAfter(text);  // inputを最後尾に追加

        if ($('.text').length >= 2) {
            $(btn_remove).show();  // inputが2つ以上あるときに削除ボタンを表示
        }

    });

    // remove
    btn_remove.click(function() {

        $('.text').last().remove();

        if ($('.text').length < 2) {
            btn_remove.hide();  // inputが2つ未満のときに削除ボタンを非表示
        }

    });
});

入力欄が2つ以上あるときだけ、削除ボタンを表示させます。

ハマったこと

初歩の初歩で少しだけハマりました。
ここでハマる人はあまりいないと思いますが、一応…

script.js
var len = $('.text').length

このような入力欄の数を数える変数を1行目とかで宣言してしまうと、
(当たり前ですが)入力欄を増やしたとしても、lenは増えません。

参考

参考にさせていただきました。ありがとうございます。
https://qiita.com/SiskAra/items/5f4bc7ee4e598b863add

10
6
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
10
6