折り返しの連絡フォーム - Javascript

  • 作成日:
  • 最終更新日:2025/10/27

折り返しの連絡フォーム

radio ボタンの value の値を取得するには、以下のコードで取得できます。

document.querySelector('input[name="time"]:checked')?.value;

<input type="date">の値を取得すると「 yyyy-mm-dd 」の形式で値を取得します。

値をリセットしたい場合は、以下のようにします。

document.getElementById('data').value = '';

コード

HTML

<!DOCTYPE html>
<html lang="js">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="/javascripts/callback.js"></script>
  <link rel="stylesheet" href="/css/callback.css">
  <title>Document</title>
</head>
<body>
  <h1>CallBack</h1>
  <form action="">
    <p>連絡先氏名:<input type="text" id="name"></p>
    <p>連絡先電話番号:<input type="tel" name="" id="tel"></p>
    <div>
      <p>
        <label><input type="radio" name="time" value="earliest" checked>最短</label>
        <label><input type="radio" name="time" value="arrange">日時指定</label>
      </p>
      <p id="data-area" class="hidden">指定日時<input type="date" name="" id="data"></p>
    </div>
    <p>備考:
      <textarea name="" id="remarks"></textarea>
    </p>
    <p><button id="btn" type="button">button</button></p>
  </form>
  <div>
    <textarea  id="output" rows="20" cols="40"></textarea>
  </div>
</body>
</html>

callback.js

function dateTimeFormat(date){
    let time = new Date(date);
    let year = time.getFullYear();
    let month = time.getMonth() + 1;
    let day = time.getDate();
    let datetime_format = year + "/" + month + "/" + day;

    return datetime_format;
}

window.addEventListener('DOMContentLoaded', function(){
  const btn = document.getElementById('btn');
  const name = document.getElementById('name');
  const tel = document.getElementById('tel');
  const remarks = document.getElementById('remarks');
  let checkedValue = document.querySelector('input[name="time"]:checked')?.value;
  let date_value = ""

  try {
    if(checkedValue == "earliest"){
      date_value = "最短"
    } else {
      throw new Error("エラーが発生しました");
    }
  } catch(e){
    console.log("キャッチしたエラー:", e.message);
  }

  const radios = document.querySelectorAll('input[name="time"]');
  radios.forEach(radio => {
    radio.addEventListener('change', () => {
      checkedValue = document.querySelector('input[name="time"]:checked')?.value;

      if(checkedValue == "earliest"){
        document.getElementById('data-area').classList.add('hidden');
        document.getElementById('data').value = '';
        date_value = "最短";
      } else if(checkedValue == "arrange"){
        document.getElementById('data-area').classList.remove('hidden');
      }
    });
  });

  btn.addEventListener('click', function(){
    const name_value = name.value;
    const tel_value = tel.value;
    const remarks_value = remarks.value;

    if(checkedValue == "arrange"){
      date_value = dateTimeFormat(document.getElementById('data').value);
    }

    let text =`連絡先氏名:${name_value}
連絡先電話番号:${tel_value}
連絡日:${date_value}
備考:${remarks_value}`

    document.getElementById('output').innerHTML = text;
  })
  
})

callback.css

.hidden {
  display: none;
}