آموزش جامع ساخت لیست کارها با جاوااسکریپت
🎯 اهداف یادگیری
- آشنایی با مدیریت رویدادها در جاوااسکریپت
- یادگیری کار با DOM در جاوااسکریپت
- پیاده سازی CRUD (ایجاد، خواندن، بهروزرسانی، حذف)
- استفاده از localStorage برای ذخیره دادهها
📌 معرفی پروژه
در این پروژه قصد داریم یک لیست کارهای ساده (To-Do List) با قابلیتهای زیر ایجاد کنیم:
javascript
const features = [ "اضافه کردن کار جدید", "علامت زدن کارهای انجام شده", "حذف کارها", "ذخیره خودکار در localStorage", "فیلتر کردن کارها (انجام شده/نشده)"];
ساختار پروژه:
- HTML: ساختار اصلی صفحه و فرم ورود
- CSS: استایلدهی به عناصر
- JavaScript: منطق و عملکرد برنامه
📌 بخش اول: ساختار HTML
ابتدا ساختار اصلی صفحه را ایجاد میکنیم:
html
<!-- ساختار اصلی برنامه --><div class="todo-container"> <h1>لیست کارهای من</h1> <div class="input-section"> <input type="text" id="todo-input" placeholder="کار جدید را وارد کنید..."> <button id="add-btn">اضافه کردن</button> </div> <div class="filters"> <button class="filter-btn active" data-filter="all">همه</button> <button class="filter-btn" data-filter="completed">انجام شده</button> <button class="filter-btn" data-filter="pending">انجام نشده</button> </div> <ul id="todo-list"></ul></div>
📌 بخش دوم: استایلدهی با CSS
برای زیباتر شدن برنامه، استایلهای زیر را اضافه میکنیم:
css
.todo-container { max-width: 600px; margin: 0 auto; padding: 20px; font-family: 'Segoe UI', Tahoma, sans-serif;}.input-section { display: flex; margin-bottom: 20px; gap: 10px;}#todo-input { flex-grow: 1; padding: 10px; border: 1px solid #ddd; border-radius: 4px;}
📌 بخش سوم: منطق برنامه با جاوااسکریپت
حالا به بخش اصلی برنامه میرسیم که با جاوااسکریپت نوشته میشود:
javascript
// متغیرهای اصلی برنامهconst todoInput = document.getElementById('todo-input');const addBtn = document.getElementById('add-btn');const todoList = document.getElementById('todo-list');const filterBtns = document.querySelectorAll('.filter-btn');// آرایهای برای ذخیره کارهاlet todos = JSON.parse(localStorage.getItem('todos')) || [];// تابع برای ذخیره کارها در localStoragefunction saveTodos() { localStorage.setItem('todos', JSON.stringify(todos));}
توابع اصلی برنامه:
- addTodo: اضافه کردن کار جدید به لیست
- renderTodos: نمایش کارها در صفحه
- toggleComplete: تغییر وضعیت انجام شدن کار
- deleteTodo: حذف کار از لیست
- filterTodos: فیلتر کردن کارها بر اساس وضعیت
📌 پیادهسازی توابع اصلی
حالا به سراغ پیادهسازی توابع اصلی میرویم:
javascript
// تابع برای اضافه کردن کار جدیدfunction addTodo() { const text = todoInput.value.trim(); if (text === '') return; const newTodo = { id: Date.now(), text, completed: false }; todos.push(newTodo); saveTodos(); renderTodos(); todoInput.value = '';}// تابع برای نمایش کارهاfunction renderTodos() { todoList.innerHTML = ''; todos.forEach(todo => { const li = document.createElement('li'); li.className = todo.completed ? 'completed' : ''; li.innerHTML = ` <span class="todo-text">${todo.text}</span> <div class="actions"> <button class="complete-btn" data-id="${todo.id}"> <i class="fas fa-check"></i> </button> <button class="delete-btn" data-id="${todo.id}"> <i class="fas fa-trash"></i> </button> </div> `; todoList.appendChild(li);}
📌 اضافه کردن رویدادها
حالا نوبت به اضافه کردن رویدادها میرسد:
javascript
// رویداد کلیک برای دکمه اضافه کردنaddBtn.addEventListener('click', addTodo);// رویداد کلیک برای لیست کارها (حذف و تکمیل)todoList.addEventListener('click', (e) => { if (e.target.classList.contains('complete-btn')) { const id = parseInt(e.target.getAttribute('data-id')); toggleComplete(id); } if (e.target.classList.contains('delete-btn')) { const id = parseInt(e.target.getAttribute('data-id')); deleteTodo(id); }});
📌 تست و راهاندازی
در نهایت برنامه را با دستور زیر راهاندازی میکنیم:
javascript
// بارگذاری اولیه کارهاdocument.addEventListener('DOMContentLoaded', () => { renderTodos();});
نتیجه نهایی:
حالا شما یک برنامه لیست کارهای کامل دارید که میتواند:
- کارهای جدید اضافه کند
- کارها را به عنوان انجام شده علامت بزند
- کارها را حذف کند
- کارها را فیلتر کند
- دادهها را در localStorage ذخیره کند
📌 بهبود پروژه (اختیاری)
برای بهبود پروژه میتوانید قابلیتهای زیر را اضافه کنید:
javascript
const improvements = [ "ویرایش کارهای موجود", "دستهبندی کارها با تگها", "تعیین تاریخ برای کارها", "امکان جستجو در کارها", "رنگبندی کارها بر اساس اولویت"];
📌 قدم بعدی
در درس بعدی با ساخت اپلیکیشن آب و هوا در جاوااسکریپت آشنا خواهیم شد!