Form

by yshrkn

HTML

<fieldset id="account">
  <legend>User</legend>
  <label>ID:
    <input type="text" name="id">
  </label>
  <br>
  <label>Password:
    <input type="password" name="password">
  </label>
</fieldset>

<fieldset id="script-type">
  <legend>Script Type</legend>
  <label>
    <input type="radio" name="script" value="js">JavaScript</label>
  <label>
    <input type="radio" name="script" value="cs">CoffeeScript</label>
  <label>
    <input type="radio" name="script" value="ts">TypeScript</label>
</fieldset>

<fieldset id="experience">
  <legend>Experience</legend>
  <select name="experience">
    <option value="">選択してください</option>
    <option value="newbie">初級</option>
    <option value="intermidiate">中級</option>
    <option value="pro">プロ!</option>
  </select>
</fieldset>

<fieldset id="skillset">
  <legend>Skillset</legend>
  <label>
    <input type="checkbox" name="java">Java</label>
  <label>
    <input type="checkbox" name="c">C</label>
  <label>
    <input type="checkbox" name="python">Python</label>
  <label>
    <input type="checkbox" name="ruby">Ruby</label>
</fieldset>

<button id="clear">Clear</button>
<button id="autoFill">Auto Fill</button>

CSS

body {
  padding: 15px;
}

fieldset {
  border: 1px solid #ccc;
  color: #333;
  background-color: #fff;
  margin: 15px 0;
}

JavaScript

/**
 * #autoFillボタンをクリックすると、フォームの各要素が自動で入力・選択されるようにしてください。
 * 入力・選択内容は適当で構いません。
 *
 * また #autoFill ボタンをクリックすると、すべての要素をクリア(初期状態に戻す)されるようにしてください。
 */

var clearBtn = document.getElementById('clear');
var autoFillBtn = document.getElementById('autoFill');

var formParts = [
  { "account": document.querySelectorAll('#account input') },
  { "scriptType": document.getElementsByName('script') },
  { "experience": document.querySelectorAll('#experience select') },
  { "skillset": document.querySelectorAll('#skillset input') }
];

//オートフィル設定用
var myInfo = {
  id: "yoshihara",
  pass: "yoshi123",
  scriptType: ["js"],
  experience: "newbie",
  skillset: ["java", "ruby"]
}

//イベント登録リスト
var eventLists = [
  {
    element: autoFillBtn,
    eventType: "click",
    fnc: function() {
      throwFromSetter(formParts, "set");
    }
  },
  {
    element: clearBtn,
    eventType: "click",
    fnc: function() {
      throwFromSetter(formParts, "reset");
    }
  }
];

//イベント登録
function addEventListeners(eventLists) {
  eventLists.forEach(function(obj) {
    obj["element"].addEventListener(obj.eventType, obj.fnc);
  });
}

//フォーム処理
function setForm(formPart, type) {

  if (type === "reset") {
    //フォームリセット処理
    switch (formPart.type) {
      case "text":
      case "password":
        formPart.value = "";
        break;
      case "radio":
        formPart.checked = false;
        break;
      case "select-one":
        formPart.selectedIndex = 0;
      case "checkbox":
        formPart.checked = false;
        break;
      default:
    }
  } else {
    //オートフィル処理
    switch (formPart.type) {
      case "text":
        formPart.value = myInfo.id;
        break;

      case "password":
        formPart.value = myInfo.pass;
        break;

      case "radio":
        myInfo.scriptType.forEach(function (element) {
          if (element === formPart.value) {
            formPart.checked = true;
          }
        });
        break;

      case "select-one":
       ...