`

Develop your todo list app with indexedDB

    博客分类:
  • js
 
阅读更多

---------------------------------the HTML code is :---------------------

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Todo List App</title>

  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div id="page-wrapper">
    <!-- Form for new Todo Items -->
    <form id="new-todo-form" method="POST" action="#">
      <input type="text" name="new-todo" id="new-todo" placeholder="Enter a todo item..." required>
      <input type="submit" name="Submit"/>
    </form>
 
    <!-- Todo Item List -->
    <ul id="todo-items"></ul>
  </div>

  <script src="db.js"></script>
  <script src="app.js"></script>
</body>
</html>

 

-------------------------------and css is :---------------------------------

* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }

body, html {
 padding: 0;
 margin: 0;
}

body {
 font-family: Helvetica, Arial, sans-serif;
 color: #545454;
 background: #F7F7F7;
}

#page-wrapper {
  width: 550px;
  margin: 2.5em auto;
  background: #FFF;
  box-shadow: 0 1px 3px rgba(0,0,0,0.2);
  border-radius: 3px;
}

#new-todo-form {
 padding: 0.5em;
 background: #0088CC;
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}

#new-todo {
 width: 100%;
 padding: 0.5em;
 font-size: 1em;
 border-radius: 3px;
 border: 0;
}

#todo-items {
 list-style: none;
 padding: 0.5em 1em;
 margin: 0;
}

#todo-items li {
 font-size: 0.9em;
 padding: 0.5em;
 background: #FFF;
 border-bottom: 1px solid #EEE;
 margin: 0.5em 0;
}

input[type="checkbox"] {
  margin-right: 10px;
}

 

-------------------------------db.js is :------------------------------------------------

/**
 * @file A module for interacting with the DB.
 * @author Matt West <matt.west@kojilabs.com>
 * @license MIT {@link http://opensource.org/licenses/MIT}.
 */

var todoDB = (function() {
  var tDB = {};
  var datastore = null;

  /**
   * Open a connection to the datastore.
   */
  tDB.open = function(callback) {
    // Database version.
    var version = 1;

    // Open a connection to the datastore.
    var request = indexedDB.open('todos', version);

    // Handle datastore upgrades.
    request.onupgradeneeded = function(e) {
      var db = e.target.result;

      e.target.transaction.onerror = tDB.onerror;

      // Delete the old datastore.
      if (db.objectStoreNames.contains('todo')) {
        db.deleteObjectStore('todo');
      }

      // Create a new datastore.
      var store = db.createObjectStore('todo', {
        keyPath: 'timestamp'
      });
    };

    // Handle successful datastore access.
    request.onsuccess = function(e) {
      // Get a reference to the DB.
      datastore = e.target.result;
     
      // Execute the callback.
      callback();
    };

    // Handle errors when opening the datastore.
    request.onerror = tDB.onerror;
  };


  /**
   * Fetch all of the todo items in the datastore.
   * @param {function} callback A function that will be executed once the items
   *                            have been retrieved. Will be passed a param with
   *                            an array of the todo items.
   */
  tDB.fetchTodos = function(callback) {
    var db = datastore;
    var transaction = db.transaction(['todo'], 'readwrite');
    var objStore = transaction.objectStore('todo');

    var keyRange = IDBKeyRange.lowerBound(0);
    var cursorRequest = objStore.openCursor(keyRange);

    var todos = [];

    transaction.oncomplete = function(e) {
      // Execute the callback function.
      callback(todos);
    };

    cursorRequest.onsuccess = function(e) {
      var result = e.target.result;
     
      if (!!result == false) {
        return;
      }
     
      todos.push(result.value);

      result.continue();
    };

    cursorRequest.onerror = tDB.onerror;
  };


  /**
   * Create a new todo item.
   * @param {string} text The todo item.
   */
  tDB.createTodo = function(text, callback) {
    // Get a reference to the db.
    var db = datastore;

    // Initiate a new transaction.
    var transaction = db.transaction(['todo'], 'readwrite');

    // Get the datastore.
    var objStore = transaction.objectStore('todo');

    // Create a timestamp for the todo item.
    var timestamp = new Date().getTime();
   
    // Create an object for the todo item.
    var todo = {
      'text': text,
      'timestamp': timestamp
    };

    // Create the datastore request.
    var request = objStore.put(todo);

    // Handle a successful datastore put.
    request.onsuccess = function(e) {
      // Execute the callback function.
      callback(todo);
    };

    // Handle errors.
    request.onerror = tDB.onerror;
  };


  /**
   * Delete a todo item.
   * @param {int} id The timestamp (id) of the todo item to be deleted.
   * @param {function} callback A callback function that will be executed if the
   *                            delete is successful.
   */
  tDB.deleteTodo = function(id, callback) {
    var db = datastore;
    var transaction = db.transaction(['todo'], 'readwrite');
    var objStore = transaction.objectStore('todo');
   
    var request = objStore.delete(id);
   
    request.onsuccess = function(e) {
      callback();
    }
   
    request.onerror = function(e) {
      console.log(e);
    }
  };


  // Export the tDB object.
  return tDB;
}());
--------------------------app.js is ---------------------

/**
 * @file The main logic for the Todo List App.
 * @author Matt West <matt.west@kojilabs.com>
 * @license MIT {@link http://opensource.org/licenses/MIT}.
 */


window.onload = function() {
 
  // Display the todo items.
  todoDB.open(refreshTodos);
 
 
  // Get references to the form elements.
  var newTodoForm = document.getElementById('new-todo-form');
  var newTodoInput = document.getElementById('new-todo');
 
 
  // Handle new todo item form submissions.
  newTodoForm.onsubmit = function() {
    // Get the todo text.
    var text = newTodoInput.value;
   
    // Check to make sure the text is not blank (or just spaces).
    if (text.replace(/ /g,'') != '') {
      // Create the todo item.
      todoDB.createTodo(text, function(todo) {
        refreshTodos();
      });
    }
   
    // Reset the input field.
    newTodoInput.value = '';
   
    // Don't send the form.
    return false;
  };
 
}

// Update the list of todo items.
function refreshTodos() { 
  todoDB.fetchTodos(function(todos) {
    var todoList = document.getElementById('todo-items');
    todoList.innerHTML = '';
   
    for(var i = 0; i < todos.length; i++) {
      // Read the todo items backwards (most recent first).
      var todo = todos[(todos.length - 1 - i)];

      var li = document.createElement('li');
      // var checkbox = document.createElement('input');
      // checkbox.type = "checkbox";
      // checkbox.className = "todo-checkbox";
      // checkbox.setAttribute("data-id", todo.timestamp);
     
      var deleteBtn = document.createElement('input');
      deleteBtn.type = "button";
      deleteBtn.value="This item is Done";
      deleteBtn.className = "todo-deleteBtn";
      deleteBtn.setAttribute("data-id-delete", todo.timestamp);
     
     // li.appendChild(checkbox);
      
     
      var span = document.createElement('span');
      span.innerHTML = todo.text;
     
      li.appendChild(span);
      li.appendChild(deleteBtn);
      todoList.appendChild(li);
     
      // Setup an event listener for the checkbox.
      // checkbox.addEventListener('click', function(e) {
      //   var id = parseInt(e.target.getAttribute('data-id'));

      //   //todoDB.deleteTodo(id, refreshTodos);
      // });
     
       // Setup an event listener for the button.
      deleteBtn.addEventListener('click', function(e) {
        var id = parseInt(e.target.getAttribute('data-id-delete'));

        todoDB.deleteTodo(id, refreshTodos);
      });
    }

  });
}

 

 

分享到:
评论

相关推荐

    TODO List App Using JavaScript.zip

    本项目"TODO List App Using JavaScript"旨在教你如何利用JavaScript来创建一个实用的待办事项应用程序。这个应用可以帮助用户管理日常任务,提高生产力。 【描述】:JavaScript作为前端开发的核心语言,提供了丰富...

    reactjs_todo:使用indexedDB的ReactJS Todo

    **ReactJS Todo 应用与 IndexedDB** ReactJS 是一个流行的JavaScript库,用于构建用户界面,特别是单页应用程序(SPA)。它使用组件化的方式管理UI,使得开发更加模块化和可维护。在这个“reactjs_todo”项目中,...

    微信小程序 todo list (源码)

    微信小程序 todo list (源码)微信小程序 todo list (源码)微信小程序 todo list (源码)微信小程序 todo list (源码)微信小程序 todo list (源码)微信小程序 todo list (源码)微信小程序 todo list (源码)微信小程序 ...

    小程序源码 todo list (代码+截图)

    小程序源码 todo list (代码+截图)小程序源码 todo list (代码+截图)小程序源码 todo list (代码+截图)小程序源码 todo list (代码+截图)小程序源码 todo list (代码+截图)小程序源码 todo list (代码+截图)小程序...

    微信小程序源码 todo list(学习版)

    微信小程序源码 todo list(学习版)微信小程序源码 todo list(学习版)微信小程序源码 todo list(学习版)微信小程序源码 todo list(学习版)微信小程序源码 todo list(学习版)微信小程序源码 todo list(学习版)微信小...

    react_idx_2todo:Ract + IndexedDB,Todo应用

    Ract + IndexedDB,Todo应用 建立 npm install --global纱线 纱线-版本 yarn global添加create-react-app npx create-react-app app1 npm安装 npm install react-router-dom-保存 npm install axios-保存 npm ...

    Todo-app_使用React Native的简单待办事项.zip

    在本项目"Todo-app_使用React Native的简单待办事项.zip"中,我们将探讨如何使用React Native构建一个基本的待办事项(Todo)应用程序。React Native是一个由Facebook开发的开源框架,它允许开发者使用JavaScript和...

    IndexedDB关系查询引擎lovefield.zip

    lovefield 是建立在 IndexedDB 上的关系查询引擎。它提供了类似 SQL 的语法,并且可以跨浏览器工作(目前支持 Chrome 37 及以上版本,Firefox 31 及以上版本,IE 10 及以上版本)。示例代码:&lt;!doctype html&gt; &lt;...

    用 Express 和 MongoDB 寫一個 todo list

    在本文中,我们将深入探讨如何使用Express.js框架和MongoDB数据库构建一个简单的待办事项(Todo List)应用程序。Express是Node.js中广泛使用的web应用框架,而MongoDB则是一种流行的NoSQL数据库,非常适合处理JSON...

    微信小程序——提醒录todo list(截图+源码).zip

    微信小程序——提醒录todo list(截图+源码).zip 微信小程序——提醒录todo list(截图+源码).zip 微信小程序——提醒录todo list(截图+源码).zip 微信小程序——提醒录todo list(截图+源码).zip 微信小程序...

    使用 Javascript 编写的 ToDo List 应用程序及其源代码.zip

    项目:使用 JavaScript 编写的 ToDo List 应用程序及其源代码 ToDo List App 是一个使用 JavaScript、CSS 和 HTML 开发的简单项目。这个项目很有趣。在这里,用户可以添加待办事项详细信息的数量,您可以看到以列表...

    微信小程序集成Redux实现的Todo list

    微信小程序集成Redux实现的Todo list微信小程序集成Redux实现的Todo list

    微信小程序源码-todo list.zip

    "微信小程序源码-todo list.zip" 是一个包含微信小程序的源代码资源,主要用于创建一个待办事项(Todo List)应用。这个压缩包中包含了必要的文件,帮助开发者理解并学习如何构建此类小程序。 源码分析: 1. **框架...

    todo-app-main.rar

    【标题】:“todo-app-main.rar”是一个压缩包文件,很可能包含了一个名为“todo-app-main”的项目源代码。从名称上看,这可能是一个待办事项应用的主要代码库。 【描述】:由于描述仅提供了文件名“todo-app-main....

    Todo-master_TODO网站源码_TOdo源码_android_源码

    【标题】"Todo-master"指的是一个开源的Todo应用的源代码项目,主要针对"TODO网站源码"和"TOdo源码"。这个项目可能是为了实现一个轻量级的任务管理工具,帮助用户方便地创建、管理和跟踪待办事项。"android"标签表明...

    html5 初试 indexedDB(推荐)

    相比于传统的Web Storage(localStorage和sessionStorage),IndexedDB提供了更强大的数据管理能力,支持索引和复杂的查询操作,适用于需要高效访问大量数据的应用场景,如离线应用、数据缓存等。 首先,我们来看...

    TODO-App-In-[removed]使用HTML,CSS和JS的TODO List App

    在Todo App中,CSS可以用于设置Todo项的背景色、边框、字体样式,以及按钮的样式等。通过CSS选择器,我们可以精确地控制各个元素的样式,实现一致且美观的界面设计。 3. **JavaScript**:JavaScript是实现网页动态...

    Django-Todo-App:在Django中创建第一个Todo-app

    path('', views.todo_list, name='todo_list'), path('add/', views.todo_add, name='todo_add'), ] ``` 同时,在项目的`urls.py`中,包含`todo`应用的URL配置: ```python from django.contrib import admin ...

    网页应用 - TODO-APP(可拖拽)使用Docker+Nodejs+Express+React实现 源代码

    网页应用-TODO-APP是一个基于Docker、Node.js、Express和React技术栈构建的可拖拽功能的项目。这个项目提供了便捷的任务管理功能,并且利用现代前端和后端技术来实现高效的应用开发和部署。 首先,Docker是容器化...

    ToDo List.apk

    ToDo List.apk

Global site tag (gtag.js) - Google Analytics