フォーム共通スタイル
共通フォーム共通
最終更新
共通フォーム共通
最終更新
フォームの入力項目をグループ化する
fieldsetで作成したグループのタイトル表示
所感:
とても見やすくなる
ボイスオーバー読み上げで確認してみても、a11y観点でも良かった
GithHub Page
Code
Capture
const x = document.getElementById('input-base');
const s = document.getElementById('select-base');
const c = document.getElementById('check-base');
const r = document.getElementById('radio-base');
const v = document.querySelector('.view');
/* ===== View Result Value ===== */
// formElement.addEventListener("submit", (event) => {
// });
const show = () => {
this.addEventListener('submit', (event) => {
// Submitの無効
event.preventDefault();
// === CheckBox ===
const arr = [];
const elems = document.getElementsByName('checkBase');
// チェックボックスを全部見に行く
for (let i = 0; i < elems.length; i++) {
// console.log(elems[i].checked); / console.log(elems[i].value);
// チェックの入っているフォームの値だけ配列で取り出す
if (elems[i].checked) {
// elems[i].checked === true;
arr.push(elems[i].value);
// console.log(elems[i].value);
}
}
// === Radio ===
const arrR = [];
const elemsR = document.getElementsByName('radioBase');
for (let i = 0; i < elemsR.length; i++) {
if (elemsR[i].checked) {
// elemsR[i].checked === true;
console.log(elemsR[i].value);
arrR.push(elemsR[i].value);
}
}
/* === Input / Selectの値はそのまま取得表示 === */
if (x.value != '') {
v.innerHTML =
'<ul>' +
'<li>' +
x.value +
'</li>' +
'<li>' +
s.value +
'</li>' +
'<li>' +
arr.join('/') +
'</li>' +
'<li>' +
arrR +
'</li>' +
'</ul>';
} else {
// HTMLのrequiredでも対応
alert('入力欄は必須です');
}
});
};
<!-- html / 閉じが無いとCSS効かない => StackBlitzのバグ = 転載時は消す-->
<!DOCTYPE html/>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Form Basic Vanilla JS</title>
<link
rel="stylesheet"
href="//fonts.googleapis.com/css?family=Roboto+Slab"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/milligram/1.3.0/milligram.min.css"
/>
<link rel="stylesheet" type="text/css" href="css/app.css" />
</head>
<body>
<div class="wrap">
<div class="container">
<form id="formBasic" action="#">
<!-- .row -->
<div class="row">
<div class="column">
<h1>Form Basic Vanilla JS</h1>
</div>
</div>
<!-- // .row -->
<!-- Input/Select -->
<div class="row">
<!-- Input Base -->
<div class="column column-50">
<label for="input-base">Input Base</label
><input type="text" id="input-base" value="inputValue" required />
</div>
<!-- Select Base -->
<div class="column column-50">
<label for="select-base">Select Base</label>
<!-- <select name="select-base" id="select-base"> -->
<select name="select-base" id="select-base" required>
// option size="n" / multiple
<option value="">選択してください</option>
<option value="option1">option1</option>
<option value="option2">option2</option>
<option value="option3">option3</option>
<option value="option4">option4</option>
<option value="option5">option5</option>
</select>
</div>
</div>
<!-- // -->
<div class="row">
<!-- CheckBox -->
<div class="column column-50">
<fieldset id="check-base">
<legend>Multi Select</legend>
<label
><input
type="checkbox"
name="checkBase"
value="ItemA"
/>ItemA</label
>
<label
><input
type="checkbox"
name="checkBase"
value="ItemB"
checked
/>ItemB</label
>
<label
><input
type="checkbox"
name="checkBase"
value="ItemC"
/>ItemC</label
>
</fieldset>
</div>
<!-- Radio -->
<div class="column column-50">
<fieldset id="radio-base">
<legend>Select One</legend>
<label
><input
type="radio"
name="radioBase"
value="RadioA"
checked
required
/>RadioA</label
>
<label
><input
type="radio"
name="radioBase"
value="RadioB"
/>RadioB</label
>
<label
><input
type="radio"
name="radioBase"
value="RadioC"
/>RadioC</label
>
</fieldset>
</div>
</div>
<!-- // -->
<!-- Submit -->
<div class="row">
<div class="column">
<input
class="button button-outline submit"
type="submit"
onclick="show()"
/>
</div>
</div>
<!-- //-->
<!-- Result -->
<div class="row">
<div class="column column-20">
<span>Submit</span>
<h2>Result</h2>
</div>
<code class="column column-80 result">
<b>View Here ↓</b>
<div class="flex">
<div class="res view"></div>
<div class="res choose"></div>
</div>
</code>
</div>
<!-- // -->
</form>
</div>
<!-- //.container -->
</div>
<!-- //.wrap -->
<script src="app.js"></script>
</body>
</html>
required 入力必須項目
radio/checkboxは同名のnameであれば最初の1点に付ければ良い
checked
デフォルトでチェックえを付けたい要素に付ける
autofocus
ローディング後に自動でそのフォームに入力待ち状態でフォーカスさせる
disabled
無効化
参照記事: