javascript_series_2
by aelgy369
HTML
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<div class="row" id="content">
<div class="col-2">
</div>
<div class="col-8 bg-light" id="toDo">
<div class="row g-3 align-items-center" id="addToDo">
<div class="col-auto">
<label class="col-form-label" id="">請輸入待辦事項:</label>
</div>
<div class="col-6">
<input type="text" id="typeToDo" class="form-control border border-3">
</div>
</div>
<div class="row">
<div class="col-6" id="options">
<select class="form-select" aria-label="Default select example" onchange="colorChange()">
<option selected>Choose Level</option>
<option value="1">Normal</option>
<option value="2">Important</option>
<option value="3">Urgent</option>
</select>
</div>
</div>
<div class="buttons">
<div class="col-auto">
<button type="button" class="btn btn-primary btn-buttons" onclick="addToDo()">
add
</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn-buttons" onclick="outputFile()">export</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-outline-primary btn-buttons" onclick="storage()">Save</button>
</div>
</div>
<hr>
<ul class="list-group" id="listGroup">
</ul>
</div>
<div...
CSS
#content {
padding: 48px 0px;
}
#toDo {
padding: 12px 12px;
}
#addToDo {
padding-bottom: 16px;
}
label.form-check-label {
margin: 0px 12px 0px 2px;
}
button.btn-outline-success {
margin-right: 16px;
}
.buttons {
margin-top: 24px;
display: flex;
}
button.btn-buttons {
margin: 0px 4px;
}
JavaScript
function addToDo() {
const content = document.querySelector('#typeToDo').value;
const ul = document.querySelector('.list-group');
// 處理 li
const li = document.createElement('li');
const removeButton = removeBtn()
const liSpan = completeBtn();
// 處理 input 元素
const liInput = inputCreate();
// 處理 label 元素
const liLabel = document.createElement('label');
liLabel.classList.add('form-check-label');
// 加入驗證
if (content != "") {
liLabel.textContent = content;
ul.append(li);
li.append(liInput, liLabel, liSpan, removeButton);
addInputBorder();
afterInput();
} else {
alert("請輸入正確文字")
}
}
// 按添加鈕之後,把 input 選項歸零
function afterInput() {
const input = document.querySelector('#typeToDo');
input.classList.remove('border-warning', 'border-danger');
// input.setAttribute('onfocus', 'this.value=""')
input.value = "";
}
// 添加 li 中的 Input 元素
function inputCreate() {
const liInput = document.createElement('input');
liInput.classList.add('form-check-input', 'me-1');
liInput.setAttribute('type', 'checkbox')
liInput.setAttribute('onClick', 'completeToggle()')
return liInput
}
// 添加已完成區塊(用按鈕來表示)
function completeBtn() {
const liSpan = document.createElement('button');
liSpan.classList.add('btn', 'btn-outline-success', 'btn-sm');
liSpan.setAttribute('type', 'button');
liSpan.setAttribute('style', 'display:none')
liSpan.textContent = '已完成';
return liSpan
}
// 添加刪除鍵
function removeBtn() {
const removeBtn = document.createElement('button');
removeBtn.classList.add('btn', 'btn-secondary', 'btn-sm');
removeBtn.setAttribute('type', 'button');
removeBtn.setAttribute('onclick', 'removeAction()');
removeBtn.textContent = 'delete';
return removeBtn;
}
// 添加 li 的 border
function addInputBorder() {
const value = document.querySelector('.form-select').value;
const li = event.target.parentElement.parentElement.nextElementSibling.nextElementSibling.lastChild;
if (value == "2") {
...