SmartCodingTips

🛠️ JavaScript CRUD App (Create, Read, Update, Delete)

This project demonstrates a basic CRUD interface using only JavaScript and HTML. All data is stored locally using localStorage.

📄 HTML Structure

<input type="text" id="name-input" placeholder="Enter name" class="border p-2 rounded w-full mb-2">
<button id="add-btn" class="bg-green-500 text-white px-4 py-2 rounded">Add</button>

<ul id="user-list" class="mt-4 space-y-2"></ul>

⚙️ JavaScript Logic

const input = document.getElementById("name-input");
const addBtn = document.getElementById("add-btn");
const userList = document.getElementById("user-list");

let users = JSON.parse(localStorage.getItem("users")) || [];
let editIndex = -1;

function saveUsers() {
  localStorage.setItem("users", JSON.stringify(users));
}

function renderUsers() {
  userList.innerHTML = "";
  users.forEach((user, index) => {
    const li = document.createElement("li");
    li.className = "flex justify-between items-center bg-gray-100 p-2 rounded";

    const span = document.createElement("span");
    span.textContent = user;

    const buttons = document.createElement("div");

    const editBtn = document.createElement("button");
    editBtn.textContent = "Edit";
    editBtn.className = "text-blue-600 mr-2";
    editBtn.onclick = () => {
      input.value = user;
      editIndex = index;
      addBtn.textContent = "Update";
      addBtn.classList.replace("bg-green-500", "bg-yellow-500");
    };

    const delBtn = document.createElement("button");
    delBtn.textContent = "Delete";
    delBtn.className = "text-red-600";
    delBtn.onclick = () => {
      users.splice(index, 1);
      saveUsers();
      renderUsers();
    };

    buttons.appendChild(editBtn);
    buttons.appendChild(delBtn);

    li.appendChild(span);
    li.appendChild(buttons);
    userList.appendChild(li);
  });
}

addBtn.onclick = () => {
  const name = input.value.trim();
  if (name) {
    if (editIndex > -1) {
      users[editIndex] = name;
      editIndex = -1;
      addBtn.textContent = "Add";
      addBtn.classList.replace("bg-yellow-500", "bg-green-500");
    } else {
      users.push(name);
    }
    input.value = "";
    saveUsers();
    renderUsers();
  }
};

renderUsers();

🚀 Features to Add Later

  • Search functionality
  • Sorting by name
  • Pagination for large lists
  • Separate fields like name, email, etc.
  • Export/import JSON data
💡 Tip: Always validate input and prevent empty values from being stored.