javascript - 无法打开数据库,$未定义,无法加载jquery

标签 javascript jquery html indexeddb

错误是数据库无法打开且$未定义,无法加载资源(j查询)。该代码的目的是接收输入字段值(日期,cal)并使用indexedDB将它们存储到数据库

  <!DOCTYPE html>
<html manifest="manifest.webapp" lang="en">
<head>
  <meta charset="utf-8">
  <title>Diab</title>

  <link rel="stylesheet" href="diab.css">

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0/jquery.min.js"></script>

  <script type="text/javascript" src="diab1.js"></script>


</head>
<body>
    <input type="date" id="date">Date</input>
    <input type="number" id="cal">Cal</input>
    <button id="add" >Add</button>
</body>
</html>



(function()
{   var db;
    var openDb=function()
    {
        var request=indexedDB.open("diabetore");
        request.onsuccess = function()
        {
            console.log("DB created succcessfully");
            db = request.result;
            console.log("openDB done!!");
        };


        request.onerror=function(){
            alert("could not open db");
        };

        request.onupgradeneeded = function()
        { 


        console.log("openDB.onupgradeneeded function");
        var store = db.createObjectStore("diab", {keyPath:  "date"});
        var dateIndex = store.createIndex("date", "date",{unique: true});

            // Populate with initial data.
            store.put({date: "june 1 2013",cal:70});
            store.put({date: "june 2 2013",cal:71});
            store.put({date: "june 3 2013",cal:72});
            store.put({date: "june 8 2013",cal:73});
        };   
    };

    function getObjectStore(store_name,mode)
    {
        var tx=db.transaction(store_name,mode);
        return tx.objectStore(store_name);
    }

    function addItems(date,cal)
    {
        console.log("addition to db started");
        var obj={date:date,cal:cal};
        var store=getObjectStore("diab",'readwrite');
        var req;
        try
        {
            req=store.add(obj);
        }catch(e)
        {
            if(e.name=='DataCloneError')
            alert("This engine doesn't know how to clone");
            throw(e);
        }
        req.onsuccess=function(evt)
        {
            console.log("****Insertion in DB successful!!****");

        };
        req.onerror=function(evt)
        {
            console.log("Could not insert into DB");
        };

    }

    function addEventListners()
    {
        console.log("addEventListeners called...");
        $('#add').click(function(evt){
            console.log("add...");
            var date=$('#date').val();
            var cal=$('#cal').val();
            if(!date || !cal)
            {
                alert("required field missing..");
                return;
            }
            addItems(date,cal);
        });
    }

    openDb();
    addEventListners();


})();

最佳答案

关于看不到创建的数据库的问题,当您打开数据库时,您应该传递另一个带有数据库版本的参数,例如:

var request=indexedDB.open("diabetore",1); 

要在 Chrome 开发者工具的“资源”选项卡上查看数据库结构,有时您必须刷新页面。

您的 addEventListners() 函数也会遇到问题,因为您的匿名函数在浏览器读取 HTML 内容之前运行,因此浏览器不知道“#add”元素,因此单击事件处理程序该元素未创建。

您应该将代码放在“$(function() {”或“$(document).ready(function() {”内):

$(function() {
    (function() {
       var db;
       var openDb=function() {

关于javascript - 无法打开数据库,$未定义,无法加载jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17383402/

相关文章:

javascript - 有一个元素随页面滚动, "snap"沿途锚定吗?

javascript - CSS 转换和时间安排似乎不对

javascript - 页面加载时更改图像的 src

javascript - 更新 .php 页面的部分内容

javascript - HTML5中属性的回退解决方案

javascript - 在不应用表格布局的情况下在表格中插入类似 div 的元素

javascript - 为什么这段代码不能专注于所需的 div?

javascript - 在多个函数中访问函数的值

javascript - pickadate.js - 禁用过去的日期(包括今天)并禁用每个星期日

javascript - 类型错误 : Cannot create property 'next' on number '8080'