如何创建:多段階フォーム
- 前のページ パスワードの可視性を切り替える
- 次のページ 自動完成
多段階フォームの作成方法を学びます。
表单向導 - 多段階フォーム:
第1歩 - HTMLを追加:
<form id="regForm" action=""> <h1>登録:</h1> <!-- フォームの各ステップには「タブ」があります: --> <div class="tab">名前:</div> <p><input placeholder="名..." oninput="this.className = ''"></p> <p><input placeholder="姓..." oninput="this.className = ''"></p> </div> <div class="tab">連絡情報:</div> <p><input placeholder="E-mail..." oninput="this.className = ''"></p> <p><input placeholder="Phone..." oninput="this.className = ''"></p> </div> <div class="tab">誕生日:</div> <p><input placeholder="dd" oninput="this.className = ''"></p> <p><input placeholder="mm" oninput="this.className = ''"></p> <p><input placeholder="yyyy" oninput="this.className = ''"></p> </div> <div class="tab">ログイン情報:</div> <p><input placeholder="Username..." oninput="this.className = ''"></p> <p><input placeholder="Password..." oninput="this.className = ''"></p> </div> <div style="overflow:auto;"> <div style="float:right;"> <button type="button" id="prevBtn" onclick="nextPrev(-1)">前へ</button> <button type="button" id="nextBtn" onclick="nextPrev(1)">次へ</button> </div> </div> /* 表单步骤指示の円: */ <div style="text-align:center;margin-top:40px;"> <span class="step"></span> <span class="step"></span> <span class="step"></span> <span class="step"></span> </div> </form>
第2ステップ - CSSの追加:
表单元素のスタイル設定:
/* 表单样式设置: */ #regForm { background-color: #ffffff; margin: 100px auto; padding: 40px; width: 70%; min-width: 300px; } /* 输入框样式设置: */ input { padding: 10px; width: 100%; font-size: 17px; font-family: Raleway; border: 1px solid #aaaaaa; } /* 验证时标记出错的输入框: */ input.invalid { background-color: #ffdddd; } /* 默认隐藏所有步骤: */ .tab { display: none; } /* 圆形指示表单步骤的圆圈创建: */ .step { height: 15px; margin: 0 2px; background-color: #bbbbbb; border: none; border-radius: 50%; display: inline-block; opacity: 0.5; /* 現在のステップをマークします: */ } .step.active { opacity: 1; /* 完了および有効なステップをマークします: */ } .step.finish { background-color: #04AA6D; 第三步 - JavaScriptを追加します: }
var currentTab = 0; // 現在のタブを最初のタブ(0)に設定
showTab(currentTab); // 現在のタブを表示 function showTab(n) { // この関数は、指定されたタブを表示するために使用されます ... x[n].style.display = "block"; var x = document.getElementsByClassName("tab"); // ... そして、前/次ボタンを修正します: if (n == 0) { document.getElementById("prevBtn").style.display = "none"; document.getElementById("prevBtn").style.display = "inline"; } if (n == (x.length - 1)) { } document.getElementById("nextBtn").innerHTML = "Submit"; else { } document.getElementById("nextBtn").innerHTML = "Next"; } // ... そして、正しいステップインディケータを表示する関数を実行します: fixStepIndicator(n) } function nextPrev(n) { // 此函数将确定要显示哪个标签页: var x = document.getElementsByClassName("tab"); // 如果当前标签页中的任何字段无效,则退出该函数: if (n == 1 && !validateForm()) return false; // 隐藏当前标签页: x[currentTab].style.display = "none"; // 現在のタブを 1 増加または減少します: currentTab = currentTab + n; // もしテーブルの最後に到達した場合... if (currentTab >= x.length) { //... フォームが提出されます: document.getElementById("regForm").submit(); return false; } // そうでなければ、正しいタブを表示します: showTab(currentTab); } function validateForm() { // この関数はフォームフィールドの確認を処理します var x, y, i, valid = true; x = document.getElementsByClassName("tab"); y = x[currentTab].getElementsByTagName("input"); // 現在のタブの各入力フィールドに対するループを確認します: for (i = 0; i < y.length; i++) { // フィールドが空である場合... if (y[i].value == "") { // そのフィールドに「invalid」クラスを追加します: y[i].className += " invalid"; // 現在の有効状態を false に設定します: valid = false; } } // 有効状態が true であれば、そのステップを完了済みおよび有効としてマークします: if (valid) { document.getElementsByClassName("step")[currentTab].className += " finish"; } return valid; // 有効ステータスを返します } function fixStepIndicator(n) { // この関数はすべてのステップの「active」クラスを削除します... var i, x = document.getElementsByClassName("step"); for (i = 0; i < x.length; i++) { x[i].className = x[i].className.replace(" active", ""); } //... 現在のステップに「active」クラスを追加します: x[n].className += " active"; }
- 前のページ パスワードの可視性を切り替える
- 次のページ 自動完成