一部のコードが期待どおりに動作しないという問題があります。最初に何をしているのかを説明する必要があります。
ドキュメントのロード時に、関数 selectForLists は、サッカーのスコアを含む sqlite DB、具体的には、matches と呼ばれるテーブルにクエリを実行し、関数 renderLists を呼び出します。
RenderLists は、プレイしているチームを、重複が削除された並べ替えられたリストに入れます。
次に、このチーム リストのエントリごとに関数 latestTest が呼び出され、そのチームがプレーしているマッチ テーブルからすべての行が選択され、latestTest2 が呼び出されます。
LatestTest2 は、そのチームがプレーしている行の数をカウントし、挿入された div に何らかのコードを出力します。
すべてのチームでそれが完了したら、renderLists 関数を終了し、ロードされた関数を呼び出すために元に戻す必要があります。
上記のすべてが完了した後、ロードされた関数が呼び出されないのはなぜですか? また、より効率的なコードで同じ結果を達成するためのヒントがあれば、ぜひ教えてください。
この長い投稿についてお詫び申し上げます。多くの人がコードがひどいと感じると確信しています。関数が多すぎて、おそらくこれを行うためのより良い方法がたくさんあることは知っていますが、ユニで JavaScript を使用してから数年が経ち、苦労しています。それとsqlite。
コードは以下またはhttp://pastebin.com/7AxXzHNBにありますありがとう
function selectForLists() { //called on (document).ready
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM matches', [], renderLists);
});
}
function renderLists(tx, rs) {
var playingList = new Array();
for (var i = 0; i < rs.rows.length; i++) {
playingList.push(rs.rows.item(i)['playing']);
}
playingListSort = playingList.sort();
var playingListFinal = new Array();
playingListSort.forEach(function(value) {
if (playingListFinal.indexOf(value) == -1) {
playingListFinal.push(value);
}
});
for (var c = 0; c < playingListFinal.length; c++) {
latestTest(playingListFinal[c]);
}
loaded(); //not running last in the function
//setTimeout(loaded,1000);
/////Using a delay because it doesn't run after the above has completed
}
function latestTest(team) {
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM matches WHERE playing="' + team + '"', [], latestTest2);
});
}
function latestTest2(tx, rs) {
counted = rs.rows.length;
var theFunction = rs.rows.item(0)['playing'];
$('#inserted').append('<li onclick="onToDate(\'' + theFunction + '\')"><img width="30px" height="25px" id="popupContactClose" src="style/soccer.png"><div id="popupContactClose2">' + counted + '</div></img>' + rs.rows.item(0)['playing'] + '</li>');
}