0

私のシナリオ:

各画像の横にある「ファイルの削除」ボタンを使用して、複数のファイル (画像) を取得するインデックス付きの db データベース ページがあります。さらに、複数のファイルを削除するために、各画像の横にチェック ボックスがあります。「ファイルの削除」ボタンは「deleteRecord」関数を呼び出し、それにキーを渡します...ファイルは問題なく削除されます。ただし、一括削除ボタンが一括削除のためにこの同じ「deleteRecord」関数を呼び出し、それにキーを渡すと、ファイルは削除されません。「deleteRecord」は各キーを介して実行され、onsuccess イベントがあります。しかし、何も削除されませんか?

deleteFile 関数 (これは個々のボタンで機能します):

function deleteRecord (id) {
    console.log('inside deleteRecord.  id: ' + id);
    var transaction = db.transaction("patient", "readwrite");
    var objectStore = transaction.objectStore("patient");
    var request = objectStore.delete(id);
    request.onsuccess = function(evt) {
    console.log("It's gone!");
};

次の場所から正常に呼び出されています。

inputBttn.onclick = function () {
    var prompt = 'Are you sure you want to delete this record?'
    answer = confirm(prompt);
    if (answer) {
    deleteRecord(key);
    console.log('Key = ' + key + ' Record Deleted');
}

そして失敗しました:

function massDelete() {
    console.log('inside massDelete');
    var checkboxes = document.getElementsByName('c1');                  
    var prompt = 'You are about to delete Multiple Records.  Are you sure?'
    var answer = confirm(prompt);
    if (answer) {
    console.log('Delete confirmed...starting mass delete');
    for (var x = 0; x < checkboxes.length; x++) {
        if (checkboxes[x].checked) {
        var key = checkboxes[x].value;
        console.log('checkbox value = ' + key);
        deleteRecord (key);
    }
};

なぜこれが起こっているのかについての説明は大歓迎です。

4

5 に答える 5

0

コードは問題ないように見えますが、次の方法で非同期ループを回避します。

function deleteRecords (ids) {    
  var transaction = db.transaction("patient", "readwrite");
  var objectStore = transaction.objectStore("patient");
  var id = ids.shift();
  var request = objectStore.delete(id);
  request.onsuccess = function(evt) {
    console.log(id + " deleted");
    if (ids.length > 0) {
      id = ids.shift();
      objectStore.delete(id);
    }
  }
  request.onerror = function(evt) {
    console.log(id + " delete fail");
  }
};
于 2012-12-23T01:56:17.773 に答える
0
  1. 複数のレコードを削除しようとするときは、トランザクションがアクティブなままであることを確認してください。このマーシャルの答えに関しては正しいです。
  2. レコードを削除するときに直面したもう 1 つの問題は、キーが数値か文字列かを判断することでした。間違ったtypeof keyを使用している場合、レコードが削除されないことがあります。
于 2015-01-10T19:04:33.190 に答える