●やりたい事
1.↓indexexeddbへ事前にsetValue関数にて、キー・バリュー1・バリュー2値を保存し
2.getAllcate関数にて空白以外のバリュー1値を昇順で重複なしで処理結果2(result2)に表示したい
●問題点及び質問
getAllcate関数のevent.target.result がnullになってしまいます。
上記●やりたい事の1は動作しているようですが、getAllcate関数のvar request =index.openCursor("nextunique");が不適切とおもいますが、
何処を修正すれば良いのでしょうか?
<html> <head> <meta charset="utf-8"/> </head> <body> <h3>登録・更新</h3> キー:<input type="text" id="newkey" /> バリュー:<input type="number" id="newvalue" /> バリュー2:<input type="number" id="newvalue2" /> <input type="button" value="設定" onclick="setValue()"/> <hr /> <h3>参照</h3> <input type="button" value="全取得" onclick="getAll()"/> <hr /> <h3>処理結果</h3> <div id="result"></div> <h3>インデックスを使った検索</h3> バリュー:<input type="button" value="一覧" onclick="getAllcate()"/> <hr /> <h3>処理結果2 </h3> <div id="result2"></div> </body> <script> var db; var indexedDB = window.indexedDB || window.mozIndexedDB || window.msIndexedDB; if (indexedDB) { // データベースを削除したい場合はコメントを外します。 // indexedDB.deleteDatabase("mydb"); var openRequest = indexedDB.open("mydb", 1.0); openRequest.onupgradeneeded = function(event) { // データベースのバージョンに変更があった場合(初めての場合もここを通ります。) db = event.target.result; var store = db.createObjectStore("mystore", { keyPath: "mykey" ,autoIncrement:true }); store.createIndex("myvalueIndex",["myvalue","myvalue2"] ,{unique:false,multiEntry:false} ); store.createIndex("myvalueIndexcate",["myvalue"],{unique:false,multiEntry:false}); } openRequest.onsuccess = function(event) { db = event.target.result; } } else { window.alert("このブラウザではIndexed DataBase API は使えません。"); } function setValue(event) { var key = document.getElementById("newkey").value; var value = Number(document.getElementById("newvalue").value); var value2 = Number(document.getElementById("newvalue2").value); var transaction = db.transaction(["mystore"], "readwrite"); var store = transaction.objectStore("mystore"); var request = store.put({ mykey: key, myvalue: value, myvalue2: value2}); request.onsuccess = function (event) { document.getElementById("newkey").value = ""; document.getElementById("newvalue").value = ""; document.getElementById("newvalue2").value = ""; } } function getAll(event) { var result = document.getElementById("result"); result.innerHTML = ""; var transaction = db.transaction(["mystore"], "readwrite"); var store = transaction.objectStore("mystore"); var request = store.openCursor(); request.onsuccess = function (event) { if(event.target.result == null) { return; } var cursor = event.target.result; var data = cursor.value; result.innerHTML += "key:" + cursor.key + " value:" + data.myvalue + " value2:" + data.myvalue2 +"<br/>"; cursor.continue(); } } function getAllcate(event) { var result = document.getElementById("result2"); result.innerHTML = ""; var transaction = db.transaction(["mystore"], "readwrite"); var store = transaction.objectStore("mystore"); var index = store.index("myvalueIndexcate"); var request = index.openCursor("nextunique"); request.onsuccess = function (event) { if(event.target.result == null) { alert("ここでnullになります"); return; } var cursor = event.target.result; var data = cursor.value; result.innerHTML += "value:" + data.myvalue + "value2:" + data.myvalue2 + " key:" + data.mykey + "<br/>"; cursor.continue(); } } </script> </html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。