use*_*015 1 javascript firefox indexeddb
我正在尝试实现这个例子。
一切正常,直到我尝试删除某个项目。
使用这个:
request.onupgradeneeded = function(event) {
console.log("upgrade", event);
db = event.target.result;
console.log("db", db);
if (!db.objectStoreNames.contains("chatBot")) {
var objectStore = db.createObjectStore("chatBot", {keyPath: "timeStamp", autoIncrement: true});
}
};
Run Code Online (Sandbox Code Playgroud)
并设置删除:
btnDelete.addEventListener("click", function() {
var id, transaction, objectStore, request;
id = document.getElementById("txtID").value;
console.log("id", typeof id);
transaction = db.transaction("people", "readwrite");
objectStore = transaction.objectStore("people");
request = objectStore.delete(id);
request.onsuccess = function(evt) {
console.log("deleted content");
};
}, false);
Run Code Online (Sandbox Code Playgroud)
将项目添加到 indexedDB 没有问题,但由于某种原因,我无法弄清楚为什么它无法删除这些项目。
是id一个字符串,objectStore.delete(id)是正确的实现。
这是示例的粘贴箱
使用火狐 18
由于您使用的是 autoIncrement 密钥,因此该密钥是由用户代理生成的。在 FF 和 Chrome 中,它是从 1 开始的整数。如果您提供有效的密钥并将其转换id为整数,您的代码可以正常运行。我在 FF 和 Chrome (dartium) 中进行了测试。根据 IndexedDB API 密钥定义,'1'和是不同的密钥。1
另一个问题是IndexedDB API 设计。无论给定的键是否被删除,删除方法总是返回到成功事件处理程序,并返回结果。undefined所以调试起来非常困难。我认为它至少应该返回已删除记录的数量。
[编辑] mod 代码:http://pastebin.com/mLpU0VfP
[编辑...另] 注意+将 转换string为integer
request = db.transaction("people", "readwrite").objectStore("people").delete(+id);
| 归档时间: |
|
| 查看次数: |
5286 次 |
| 最近记录: |