如何 TO - 帶多步的表單
瞭解如何建立多步表單。
表單嚮導 - 多步表單
步驟 1) 新增 HTML
示例
<form id="regForm" action="">
<h1>註冊:</h1>
<!-- 表單中每個步驟的一個“標籤頁”: -->
<div class="tab">姓名
<p><input placeholder="名字..." oninput="this.className = ''"></p>
<p><input placeholder="姓氏..." oninput="this.className = ''"></p>
</div>
<div class="tab">聯絡資訊
<p><input placeholder="電子郵件..." oninput="this.className = ''"></p>
<p><input placeholder="電話..." oninput="this.className = ''"></p>
</div>
<div class="tab">生日
<p><input placeholder="日" oninput="this.className = ''"></p>
<p><input placeholder="月" oninput="this.className = ''"></p>
<p><input placeholder="年" oninput="this.className = ''"></p>
</div>
<div class="tab">登入資訊
<p><input placeholder="使用者名稱..." oninput="this.className = ''"></p>
<p><input placeholder="密碼..." 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;
width: 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;
}
步驟 3) 新增 JavaScript
示例
var currentTab = 0; // 當前標籤頁設為第一個標籤頁 (0)
showTab(currentTab); // 顯示當前標籤頁
function showTab(n) {
// 這個函式將顯示錶單指定的標籤頁...
var x = document.getElementsByClassName("tab");
x[n].style.display = "block";
// ...並固定“上一步”/“下一步”按鈕
if (n == 0) {
document.getElementById("prevBtn").style.display = "none";
} else {
document.getElementById("prevBtn").style.display = "inline";
}
if (n == (x.length - 1)) {
document.getElementById("nextBtn").innerHTML = "提交";
} else {
document.getElementById("nextBtn").innerHTML = "下一步";
}
// ...並執行一個函式來顯示正確的步驟指示器
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";
}
自己動手試一試 »