通俗的意思就是说,在开发过程当中,在前期设计就必须作好相对应的扩展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");
}
}
复制代码