آموزش جامع ساخت لیست کارها با جاوااسکریپت


🎯 اهداف یادگیری

  • آشنایی با مدیریت رویدادها در جاوااسکریپت
  • یادگیری کار با 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')) || [];
// تابع برای ذخیره کارها در localStorage
function 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 = [
"ویرایش کارهای موجود",
"دسته‌بندی کارها با تگ‌ها",
"تعیین تاریخ برای کارها",
"امکان جستجو در کارها",
"رنگ‌بندی کارها بر اساس اولویت"
];

📌 قدم بعدی

در درس بعدی با ساخت اپلیکیشن آب و هوا در جاوااسکریپت آشنا خواهیم شد!