JavaScript+IndexedDB实现留言板:客户端存储数据

之前看到贴友有问:用js怎么实现留言板效果。当时也写了一个,但是没有实现数据存储:http://www.ido321.com/591.html

现在将之前的改写一下,原来的HTML布局不变,为了防止Google调整字体,在原来的css中加入一个样式

body{
20px;
none;
 }

在google中调整字体,可以见此文:http://www.ido321.com/652.html     有评论说不行,但是LZ在这个实例中测试了,是可以的

重点是js,完整的js代码修改如下:

   1:
var db;
var arrayKey=[]
var openRequest;
var lastCursor;
   6:
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
   8:
function init()
     {
//打开数据库
);
//只能在onupgradeneeded创建对象存储空间
function(e)
         {
);
var thisDb = e.target.result;
))
             {
);
/*
                 *创建对象存储空间,第一个参数必须和打开数据库的第一个参数一致
                 *设置键名是id,并且可以自增.
                 *autoIncrement默认是false,keyPath默认null
                 */
true });
/*
                 *创建索引
                 *第一个参数是索引名,第二个是属性名,第三个设置索引特性
                 */
false });
             }
         }
  34:
function(e)
         {
//e.target.result返回一个数据库实例
             db = e.target.result;
event)
             {
event.target.errorCode);
event.target);
             };
))
             {
);
//读写方式开启事务
);
event)
                 {
                 };
event)
                 {
// 错误处理
event);
                 };
);
  59:
//得到messageIndexDB的objectStore对象
);
  62:
//游标查询
event)
                 {
//event.target.result获取存储空间的下一个对象
event.target.result;
var flag=0;
  69:
//判断是否存在下一个对象,不存在是curson为null
if (cursor)
                     {
//获取键
//实际对象,一个Object实例
);
);
]);
                         msgDiv.id=cursor.key;
                         msgDiv.appendChild(msgTxt);
                         msgList.appendChild(msgDiv);
                         arrayKey.push(cursor.key);
                         flag++;
                         lastCursor=cursor.key;
//将游标下移一项
                     }
else
                     {
);
                     }
                 };
//错误处理
event){
event);
                 };
             }
         };
  97:
event) {
// 对request.error做一些需要的处理!
);
         };
 102:
//焦点处理
function()
             {
;
             });
function()
             {
;
             });
 112:
//添加数据
function()
         {
).value;
).value;
:content}];
 120:
);
event)
             {
             };
event)
             {
event);
             };
//得到messageIndexDB的objectStore对象
);
             objectStore.add(messageIndexDB);
event)
             {
event.target.result;
var key;
null)
                 {
                     key=cursor.key;
                     lastCursor=key;
                 }
else
                 {
                     key=++lastCursor;
                 }
);
);
                 msgDiv.id=key;
+content);
                 msgDiv.appendChild(msgTxt);
                 msgList.appendChild(msgDiv);
                 arrayKey.push(key);
+key);
                 console.dir(messageIndexDB);
             }
         });
//删除
function()
         {
if(arrayKey.length==0){
);
             }
else
             {
);
event)
                 {
                 };
 170:
event)
                 {
event);
                 };
//得到messageIndexDB的objectStore对象
);
var removeKey=arrayKey.shift();
//获取key
var getRequest=objectStore.get(removeKey);
function(e)
                 {
var result =getRequest.result;
                     console.dir(result);
                 }
//删除key
var request=objectStore.delete(removeKey);
function(e)
                 {
);
                 };
function(e)
                 {
, e);
                 };
//隐藏要删除的元素
;
             }
         });
     }
false);

要注意一点的是,在创建对象存储空间的时候,必须在openRequest.onupgradeneeded 中创建,否则出错

JavaScript+IndexedDB实现留言板:客户端存储数据

FF4+,和google支持IndexedDB,IE10+据说支持,但LZ测试了,不支持,有错误还请指正。
由于IndexedDB不能实现共享,所以每个客户端打开时IndexedDB保存的数据不一致,LZ是在Google中测试的,打开控制台,查看数据如下

 

JavaScript+IndexedDB实现留言板:客户端存储数据

添加留言:

JavaScript+IndexedDB实现留言板:客户端存储数据
删除留言:

JavaScript+IndexedDB实现留言板:客户端存储数据

来源:http://www.ido321.com/660.html