JavaScript 系列三:練習4
表單驗證
by applelily
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript 系列三:練習4 ── 表單驗證</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:[email protected]&display=swap" rel="stylesheet">
<link rel="stylesheet" href="./js_form_validation.css">
</head>
<body>
<div class="container">
<form action="" method="get" >
<div class="header">註冊帳戶
<hr>
</div>
<input type="text" name="NickName" id="nick-name" required>
<div class="labelline">暱稱</div>
<div class="err err-nick-name">
*不能為空白、必須在40字以內
</div>
<input type="email"
name="Email" id="email" required>
<div class="labelline">Email 電子郵件</div>
<div class="err err-email">*不能為空白、必須包含 @ 符號</div>
<input type="password"
name="current-password" id="current-password" required>
<div class="labelline">密碼</div>
<div class="err err-password">
* 不能為空白、必須在8字以上、必須在100字以內
</div>
<div class="button-container">
<button class="submit" type="submit" onclick="btn_submit(event)">註冊
<div class="toast-success">
✅ 註冊成功!可以查看 Email 確認細節!
</div>
</button>
</div>
</form>
</div>
<script src="./js_form_validation.js"></script>
</body>
</html>
CSS
/* Hex Color Code
#ebcbbb 膚色
#6c999a tiffiny綠
#0e2222 深藍色
#DF3079 粉色
*/
*{
font-family: "Noto Sans TC", sans-serif;
}
body{
display: flex;
justify-content: center;
align-items:center;
min-height: 100vh; /* 要設定高度 align-items 才有效 */
background-color: #ebcbbb ;
}
.container{
display: flex;
justify-content: center;
align-items: center;
color: #0e2222;
width: 540px;
height: 450px ;
background: #6c999a;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.6);
position: relative;
}
.header{
text-align: center;
font-size: 1.5em;
margin-bottom: 35px;
}
input{
margin-top: 30px;
width: 450px;
height: 40px ;
font-size: 18px;
background: transparent;
transition: 0.1s ease;
border: 1px solid #0e2222;
border-radius: 5px;
color: #212121;
}
.labelline{
position: absolute;
background: #6c999a;
margin-top: -33px;
margin-left: 5px;;
transition: 0.2s ease;
}
input:focus{
outline: none; /* 不要秀出邊框 */
}
input:focus + .labelline ,
input:valid + .labelline{
/* color: #0e2222; */
color: #DF3079;
padding: 0.12px;
transform: translate(1.5px, -21px) scale(0.9);
z-index: 1111;
}
.err{
visibility: hidden;
color:#f00;
font-size: 13px;
}
/* button 要變更位置,需要在外面包一層wrap .button-container */
.button-container {
display: flex;
justify-content:end;
width: 100%;
margin-top: 20px;
}
button.submit {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
background-color: #0056b3 ;
color: white;
border: none;
border-radius: 5px;
transition: background-color 0.3s ease;
}
button.submit:hover {
background-color: #0e2222;
}
.toast-success{
display:none;
font-size:15px;
position: absolute;
background-color: #C6F6D5;
color: #276749;
border-radius: 15px;
padding: 12px 15px;
top:0;
left:...
JavaScript
function btn_submit(event) {
event.preventDefault(); // 防止表單提交
let valid = true;
// 驗證暱稱
let nickname = document.querySelector('#nick-name').value.trim();
if (nickname === "" || nickname === null | nickname.length>40) {
let elem_err_nickname = document.querySelector('.err-nick-name');
elem_err_nickname.style.visibility = 'visible';
valid = false;
} else {
let elem_err_nickname = document.querySelector('.err-nick-name');
elem_err_nickname.style.visibility = 'hidden';
}
// 驗證電子郵件
let email = document.querySelector('#email').value.trim();
if (email === "" || !email.includes('@')) {
let elem_err_email = document.querySelector('.err-email');
elem_err_email.style.visibility = 'visible';
valid = false;
} else {
let elem_err_email = document.querySelector('.err-email');
elem_err_email.style.visibility = 'hidden';
}
// 驗證密碼
let password = document.querySelector('#current-password').value.trim();
if (password === "" || password.length < 8 || password.length > 100) {
let elem_err_password = document.querySelector('.err-password');
elem_err_password.style.visibility = 'visible';
valid = false;
} else {
let elem_err_password = document.querySelector('.err-password');
elem_err_password.style.visibility = 'hidden';
}
// 如果所有字段都有效,允許表單提交
if (valid) {
// 清空所有输入字段
document.querySelector('#nick-name').value = '';
document.querySelector('#email').value = '';
document.querySelector('#current-password').value = '';
document.querySelector('.toast-success').style.display='block';
}
else{
document.querySelector('.toast-success').style.display='none';
}
}