今天是第二十天我們可以寫一個javascript資訊盤點網頁程式管理系統,以下是我的程式碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Inventory Management System</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>資訊盤點管理系統</h1>
<div class="container">
<form id="item-form">
<label for="item-name">物品名稱:</label>
<input type="text" id="item-name" required>
<label for="item-quantity">數量:</label>
<input type="number" id="item-quantity" required>
<button type="submit">新增物品</button>
</form>
<ul id="item-list"></ul>
</div>
<script src="script.js"></script>
</body>
</html>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
.container {
max-width: 600px;
margin: 0 auto;
background: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
}
form {
display: flex;
flex-direction: column;
gap: 10px;
}
ul {
list-style: none;
padding: 0;
}
li {
background: #e2e2e2;
margin: 10px 0;
padding: 10px;
display: flex;
justify-content: space-between;
}
button {
background-color: #5cb85c;
color: white;
border: none;
padding: 10px;
cursor: pointer;
}
button:hover {
background-color: #4cae4c;
}
// 取得 UI 元素
const itemForm = document.getElementById('item-form');
const itemNameInput = document.getElementById('item-name');
const itemQuantityInput = document.getElementById('item-quantity');
const itemList = document.getElementById('item-list');
// 從本地儲存讀取物品清單
let items = JSON.parse(localStorage.getItem('inventoryItems')) || [];
// 初始化物品清單
function init() {
itemList.innerHTML = '';
items.forEach(item => {
addItemToDOM(item);
});
}
// 新增物品到 DOM 並更新本地儲存
function addItemToDOM(item) {
const li = document.createElement('li');
li.innerHTML = `${item.name} - 數量: ${item.quantity} <button class="delete-btn">刪除</button>`;
li.querySelector('.delete-btn').addEventListener('click', () => {
removeItem(item.name);
});
itemList.appendChild(li);
}
// 新增物品
itemForm.addEventListener('submit', (e) => {
e.preventDefault();
const itemName = itemNameInput.value;
const itemQuantity = itemQuantityInput.value;
if (itemName === '' || itemQuantity === '') {
alert('請填寫所有欄位');
return;
}
const newItem = {
name: itemName,
quantity: itemQuantity
};
items.push(newItem);
localStorage.setItem('inventoryItems', JSON.stringify(items));
addItemToDOM(newItem);
itemNameInput.value = '';
itemQuantityInput.value = '';
});
// 刪除物品
function removeItem(itemName) {
items = items.filter(item => item.name !== itemName);
localStorage.setItem('inventoryItems', JSON.stringify(items));
init();
}
// 初始化應用
init();
HTML
:提供物品名稱和數量的輸入欄位,還有一個顯示物品清單的區域。CSS
:設置了一些簡單的樣式來讓頁面更美觀。JavaScript
:
LocalStorage
儲存物品清單,讓資料不會在頁面重新整理後丟失。在程式開始的時候,我們使用 document.getElementById()
方法來取得 HTML 中的元素,這些是頁面上表單和顯示物品清單的區塊。
const itemForm = document.getElementById('item-form');
const itemNameInput = document.getElementById('item-name');
const itemQuantityInput = document.getElementById('item-quantity');
const itemList = document.getElementById('item-list');
這段程式碼做的是:
itemForm
: 對應 <form>
表單元素。itemNameInput
: 對應輸入物品名稱的 <input>
。itemQuantityInput
: 對應輸入物品數量的 <input>
。itemList
: 對應用來顯示物品清單的 <ul>
元素。這樣就可以在 JavaScript 中操作這些元素。
為了讓物品清單即使頁面重新整理後依然存在,我們使用瀏覽器的 LocalStorage
儲存和讀取資料。
let items = JSON.parse(localStorage.getItem('inventoryItems')) || [];
localStorage.getItem('inventoryItems')
:從 LocalStorage
中取得名稱為 'inventoryItems'
的資料。如果這個名稱對應的資料存在,它會是一個字串格式。JSON.parse()
:因為從 LocalStorage
中讀取的資料是字串格式,這個函數會將字串轉換成 JavaScript 可以操作的陣列或物件。如果本地沒有資料(例如使用者第一次開啟網頁時),則會返回空陣列 []
。當頁面載入時,我們會呼叫 init()
函數來初始化頁面,這個函數會從 items
陣列中將儲存的物品顯示出來。
function init() {
itemList.innerHTML = ''; // 清空物品列表
items.forEach(item => {
addItemToDOM(item); // 將每一個物品顯示在頁面上
});
}
itemList.innerHTML = '';
:清空 ul
裡面現有的物品項目,確保重新顯示最新資料。items.forEach()
:這個方法會遍歷 items
陣列中的每個物品,並且將每個物品都透過 addItemToDOM()
函數顯示到頁面上。這個函數負責將物品新增到網頁的清單區域(<ul>
內),並在每個物品旁顯示一個 "刪除" 按鈕。
function addItemToDOM(item) {
const li = document.createElement('li'); // 建立一個 <li> 元素
li.innerHTML = `${item.name} - 數量: ${item.quantity} <button class="delete-btn">刪除</button>`;
li.querySelector('.delete-btn').addEventListener('click', () => {
removeItem(item.name); // 為刪除按鈕加上刪除功能
});
itemList.appendChild(li); // 將 <li> 加到 <ul> 清單中
}
document.createElement('li')
:建立一個新的 <li>
元素來顯示每個物品。li.innerHTML
:將物品名稱和數量用文字格式填入 li
,並加上一個刪除按鈕。li.querySelector('.delete-btn').addEventListener('click', ... )
:為刪除按鈕添加一個事件監聽器,當使用者點擊按鈕時,會執行 removeItem(item.name)
函數,進行刪除操作。itemList.appendChild(li)
:將這個建立的 li
元素加到 ul
中,讓它顯示在頁面上。當使用者在表單中輸入物品名稱與數量,並按下 "新增物品" 按鈕時,會觸發 submit
事件。這段程式碼會將新的物品加入到清單中,並更新本地儲存。
itemForm.addEventListener('submit', (e) => {
e.preventDefault(); // 阻止表單的預設行為(頁面重新整理)
const itemName = itemNameInput.value; // 取得輸入的物品名稱
const itemQuantity = itemQuantityInput.value; // 取得輸入的物品數量
if (itemName === '' || itemQuantity === '') {
alert('請填寫所有欄位');
return; // 若有欄位為空,則彈出提示並結束函數
}
const newItem = {
name: itemName,
quantity: itemQuantity
};
items.push(newItem); // 將新物品加入到物品陣列
localStorage.setItem('inventoryItems', JSON.stringify(items)); // 更新本地儲存
addItemToDOM(newItem); // 將新物品顯示在頁面上
itemNameInput.value = ''; // 清空輸入框
itemQuantityInput.value = ''; // 清空輸入框
});
e.preventDefault()
:阻止表單提交時的預設行為(重新整理頁面)。items.push(newItem)
:將新物品加入 items
陣列。localStorage.setItem()
:將更新後的 items
陣列以字串格式儲存到 LocalStorage
。addItemToDOM()
:將新物品加入網頁清單顯示。這個函數負責從 items
陣列中刪除物品,並更新本地儲存及頁面顯示。
function removeItem(itemName) {
items = items.filter(item => item.name !== itemName); // 過濾掉不需要的物品
localStorage.setItem('inventoryItems', JSON.stringify(items)); // 更新本地儲存
init(); // 重新初始化頁面顯示
}
items.filter()
:過濾掉 items
陣列中名稱與刪除項目相同的物品,並回傳一個新的陣列。localStorage.setItem()
:更新 LocalStorage
中儲存的物品清單。init()
:重新初始化頁面,清空原本的清單並顯示最新的物品資料。最後,我呼叫 init()
函數來初始化應用,確保當頁面載入時,會顯示已儲存的物品清單。
init();
這個 JavaScript 程式管理了一個簡單的資訊盤點系統,具備以下功能:
LocalStorage
,即使重新整理頁面,資料也會保留。