Javascript 如何向IndexedDB中预先存在的ObjectStore添加索引

Javascript 如何向IndexedDB中预先存在的ObjectStore添加索引,javascript,indexeddb,Javascript,Indexeddb,我知道这个问题已经被问过好几次了。但在多次出错后,我一直无法找到解决方案。这是我的索引数据库的代码 request.onupgradeneeded = function(event) { var db = event.target.result; var upgradeTransaction = event.target.transaction; var objectStore = db.createObjectStore("todostore",

我知道这个问题已经被问过好几次了。但在多次出错后,我一直无法找到解决方案。这是我的索引数据库的代码

    request.onupgradeneeded = function(event) {
      var db = event.target.result;
   var upgradeTransaction = event.target.transaction;        
   var objectStore = db.createObjectStore("todostore", {keyPath: "timestamp"});     

UserFunction();     

     };

     function UserFunction(){
var ObjectStore = db.transaction("todostore").objectStore("todostore");
var index = ObjectStore.createIndex("ixName", "fieldName");
  }



Failed to execute 'createIndex' on 'IDBObjectStore': The database is not running a version change transaction.
我正在调用button click的这个函数,我想在单击按钮时添加带值的索引

<button onclick="UserFunction()">createIndex</button>
createIndex
UserFunction()调用中的代码正在启动一个新事务,而“upgradeneeded”侦听器中已有一个事务正在进行

因此,新事务应该在objectStore.transaction完成后启动

以下是JSFIDLE:


您只能在版本升级期间更改数据库的架构。类似这样的说法是有道理的:

function OnClick() {
  // assumes db is a previously opened connection
  var oldVersion = db.version; 
  db.close();

  // force an upgrade to a higher version
  var open = indexedDB.open(db.name, oldVersion + 1);
  open.onupgradeneeded = function() {
    var tx = open.transaction;
    // grab a reference to the existing object store
    var objectStore = tx.objectStore('todostore');
    // create the index
    var index = objectStore.createIndex('ixName', 'fieldName');
  };
  open.onsuccess = function() {
    // store the new connection for future use
    db = open.result;
  };
}

可能重复的我已经尝试了以上,但没有工作的meany帮助plz?有人能告诉我你能在JSFIDLE上分享你的代码吗?在那里我们可以很容易地重构和解决它。你只能在versionchange事务中使用createIndex,也就是说,在使用更高版本打开并执行升级时使用createIndex。不能在以db.transaction()启动的事务中使用createIndex
function OnClick() {
  // assumes db is a previously opened connection
  var oldVersion = db.version; 
  db.close();

  // force an upgrade to a higher version
  var open = indexedDB.open(db.name, oldVersion + 1);
  open.onupgradeneeded = function() {
    var tx = open.transaction;
    // grab a reference to the existing object store
    var objectStore = tx.objectStore('todostore');
    // create the index
    var index = objectStore.createIndex('ixName', 'fieldName');
  };
  open.onsuccess = function() {
    // store the new connection for future use
    db = open.result;
  };
}