"mockapi"
Bootstrap 3.1.0 Snippet by muhittinbudak

<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <!------ Include the above in your HEAD tag ----------> <!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <title>Todo App</title> <!-- Bootstrap 3 CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <style> .completed { text-decoration: line-through; color: #888; } .list-group-item { display: flex; justify-content: space-between; align-items: center; } .todo-text { cursor: pointer; flex-grow: 1; margin: 0; } .edit-input { display: none; width: 70%; } </style> </head> <body> <div class="container" style="max-width: 500px; margin-top: 30px;"> <h2 class="text-center">Todo App</h2> <!-- Input Alanı --> <div class="input-group"> <input type="text" id="taskInput" class="form-control" placeholder="Görev ekleyin..."> <span class="input-group-btn"> <button id="addBtn" class="btn btn-primary">Ekle</button> </span> </div> <!-- Todo Listesi --> <ul id="todoList" class="list-group" style="margin-top: 20px;"></ul> </div> <!-- jQuery ve Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script> const api = "https://6884ac65745306380a390353.mockapi.io/asyncPranav/todos"; </script> </body> </html>
// Verileri Getir ve Listele function loadTodos() { $.getJSON(api, function(data) { $("#todoList").empty(); data.reverse().forEach(todo => { $("#todoList").append(` <li class="list-group-item" data-id="${todo.id}"> <span class="todo-text ${todo.completed ? 'completed' : ''}">${todo.text}</span> <input type="text" class="form-control input-sm edit-input" value="${todo.text}"> <div> <button class="btn btn-xs btn-warning edit-btn"><span class="glyphicon glyphicon-pencil"></span></button> <button class="btn btn-xs btn-success save-btn hidden"><span class="glyphicon glyphicon-ok"></span></button> <button class="btn btn-xs btn-danger delete-btn"><span class="glyphicon glyphicon-trash"></span></button> </div> </li> `); }); }); } // Ekle function addTodo() { let text = $("#taskInput").val().trim(); if (!text) return alert("Boş görev eklenemez."); $.post(api, { text: text, completed: false }, function() { $("#taskInput").val(""); loadTodos(); }); } // Olaylar (Event Listeners) $(document).ready(function() { loadTodos(); $("#addBtn").click(addTodo); $("#taskInput").keypress(e => { if(e.which == 13) addTodo(); }); // Sil $("#todoList").on("click", ".delete-btn", function() { let id = $(this).closest("li").data("id"); $.ajax({ url: `${api}/${id}`, type: "DELETE", success: loadTodos }); }); // Tamamlandı Yap / Kaldır $("#todoList").on("click", ".todo-text", function() { let li = $(this).closest("li"); let id = li.data("id"); let isCompleted = !$(this).hasClass("completed"); $.ajax({ url: `${api}/${id}`, type: "PUT", data: { completed: isCompleted }, success: loadTodos }); }); // Düzenleme Modu $("#todoList").on("click", ".edit-btn", function() { let li = $(this).closest("li"); li.find(".todo-text, .edit-btn").hide(); li.find(".edit-input, .save-btn").removeClass("hidden").show(); }); // Kaydet $("#todoList").on("click", ".save-btn", function() { let li = $(this).closest("li"); let id = li.data("id"); let newText = li.find(".edit-input").val().trim(); if (!newText) return alert("Boş bırakılamaz."); $.ajax({ url: `${api}/${id}`, type: "PUT", data: { text: newText }, success: loadTodos }); }); });

Questions / Comments: