JSFiddle - React, Tailwind, and code Playground
by kushmuffin
HTML
<div class="container">
<h3>註冊</h3>
<form class="form">
<div class="group box">
<label for="usrname">用戶暱稱</label>
<input type="text" id="name" name="name" required>
<span class="span">不能為空白、必須在40字以內!</span>
</div>
<div class="group box">
<label for="usrname">信箱</label>
<input type="text" id="mail" name="mail" required>
<span class="span">不能為空白、必須包含 @ 符號!</span>
</div>
<div class="group box">
<label for="usrname">密碼</label>
<input type="text" id="pwd" name="pwd" required minlength="8" maxlength="100">
<span class="span">不能為空白、必須在8字以上、必須在100字以內!</span>
</div>
<button type="submit" id="submit" class="submit">註冊</button>
</form>
</div>
CSS
* {
box-sizing: border-box;
}
body{
background: #fff;
padding: 0 100px;
}
.container{
padding: 20px 0;
margin: 30px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: wheat;
border: 1px solid black;
border-radius: 5px;
}
.container .form{
}
.group input{
border: 1px solid black;
border-radius: 3px;
padding: 4px 6px;
}
div.group{
width: 280px;
margin: 10px 0;
display: flex;
flex-direction: column;
}
.group span{
display: none;
color: red;
font-size: 10px;
transition: all 1s;
}
.submit{
padding: 10px 15px;
border: none;
border-radius: 8px;
background-color: powderblue;
}
JavaScript
let name = document.querySelector('#name');
let mail = document.querySelector('#mail');
let pwd = document.querySelector('#pwd');
let submitBtn = document.querySelector('#submit');
submitBtn.onclick = formRequired;
let spans = document.querySelectorAll('.span');
for (var span of spans) {
span.style.opacity = '0';
}
function formRequired() {
if(name.value == '' || name.length >= 40){
name.closest('.group').querySelector('.span').style.display = 'unset';
name.closest('.group').querySelector('.span').style.opacity = '1';
name.style.borderColor = 'red';
}
if(mail.value == '' || mail.includes('@')){
mail.closest('.group').querySelector('.span').style.display = 'unset';
mail.closest('.group').querySelector('.span').style.opacity = '1';
mail.style.borderColor = 'red';
}
if(pwd.value == '' || pwd.length <=8 || pwd.length >=100){
pwd.closest('.group').querySelector('.span').style.display = 'unset';
pwd.closest('.group').querySelector('.span').style.opacity = '1';
pwd.style.borderColor = 'red';
}
}
console.log(name.value)
console.log(mail.value)
console.log(pwd.value)
var inputs = document.querySelectorAll('input');
for (var input of inputs) {
input.onclick = styleChange;
}
function styleChange(e) {
e.target.closest('.group').querySelector('span').style.display = 'none';
e.target.closest('.group').querySelector('span').style.opacity = '0';
e.target.style.border = '1px solid black';
}