通俗的意思就是說,在開發過程當中,在前期設計就必須作好相對應的擴展html
這裏舉一個栗子:前端
這裏有個表單:bash
<div id="loginForm">
<input type="text" class="username" id="username" placeholder="username"><br>
<input type="text" class="pwd" id="pwd" placeholder="pwd"><br>
<button onclick="checkLogin()">提交</button>
</div>
複製代碼
通常作前端校驗的方法可能就會是這個樣子:函數
好比下面這樣的方式:ui
function checkLogin() {
let username = document.querySelector("#username").value;
if (!username) {
alert("username must not be null");
}
let pwd = document.querySelector("#pwd").value;
if (!pwd) {
alert("pwd must not be null");
}
}
複製代碼
這樣就會面臨下面的問題:spa
這是一個很是重要的原則,對原來已有的代碼最好不作修改設計
那麼咱們在這裏該這麼作呢?看這樣的修改:code
<div id="loginForm">
<input type="text" class="username" data-validate="checkUsername" id="username" placeholder="username"><br>
<input type="text" class="pwd" data-validate="checkPwd" id="pwd" placeholder="pwd"><br>
<button onclick="checkLoginForm()">提交</button>
</div>
複製代碼
function checkLoginForm() {
// 表單
let form = document.querySelector("#loginForm");
// 表單中input
let ipts = form.querySelectorAll("input");
// 獲取input中的校驗函數名,並調用對應的函數
for (let i = 0; i < ipts.length; i++) {
let input = ipts[i];
let validate = input.dataset.validate;
let validateFn = window[validate];
if (validateFn) {
let rst = !validateFn(input.value);
if (rst) {
return false;
}
} else {
alert(`當前沒有這個${validate}校驗函數`);
}
}
}
複製代碼
function checkUsername(username) {
if (!username) {
alert("username must not be null");
}
}
複製代碼