LoginSignup
0
1

More than 1 year has passed since last update.

JavaScript で「 〇〇 と同じ 」的な チェックボックス によるフォームの 自動入力 を実装する

Posted at

例えば複数人で泊まるホテルを予約する時、宿泊者の情報を入力する際に2人目以降の住所記入欄に「代表者と同じ」みたいなチェックボックス があったりしますよね。でチェック入れたら1人目のフォームに入れてる住所が勝手に入力されるみたいな。それやります。

仕様

「代表者(1人目)と同じ情報を入力する」というチェックボタンを入れると2人目の入力フォームに1人目のフォームの値がコピペ される。
その後2人目のフォームを編集した場合チェックボックスのチェックが外れる

実装

以下のようなHTMLファイルでフォームを作成していることを想定します。

<!-- フォーム例 -->

<!-- 1人目 -->
<div class="first">
    <input type="text" id="name1" required>
    <input type="text" id="address1" required>
</div>

<!-- 2人目 -->
<!-- チェックボックス  -->
<input id="is_same_as_1" type="checkbox" /><label for="is_same_as_1">代表者(1人目)と同じ情報を入力</label>

<div class="second">
    <input type="text" id="name2">
    <input type="text" id="address2">
</div>

私が実際に実装したのはDjangoのHTMLで、フォームはinputタグではなく別のファイルで定義したものを引用する形でした。
その場合は、divタグで囲うなどでもして無理やりidを与えるか、生成されたフォームを直接右クリック→「検証」を押して自動生成されたidを調べるだけでも大丈夫です。

JavaScript でフォームの自動入力

htmlファイルのbodyタグの最後にscriptタグで以下のコードを書きます。

<body>

...

<script>
  $(function () {
    // チェックボックスを指定
    let is_same_as_1 = document.getElementById('is_same_as_1');

    // チェックを入れたときコピペを実行
    $('#is_same_as_1').click(function(){
      let name1 = $('#name1').val();
      let address1 = $('#address1').val();
      if (is_same_as_1.checked == true){    
        $("#name2").val(name1);
        $("#address2").val(address1);  
      }
    });

    // 2人目のフォームを編集したときチェックを外す
    $('#name2').change(function() {
      $("#is_same_as_1").prop("checked", false);
    });
    $('#address2').change(function() {
      $("#is_same_as_1").prop("checked", false);
    });
  });
</script>

</body>

終わり

0
1
1

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
0
1