0

私はphonegapを使ってAndroidアプリを開発しています。forlocalStorageからのループを含むHTMLテーブルを作成しています。行ごとに、のインデックスiを格納して、インデックスのforような名前を持つlocalStorageからアイテムを取得するために使用する必要があります。私はいくつかのコードを持っていますが、その効果のために定義した変数はループによって上書きされます(もちろん)。コードは次のとおりです。

<script language="javascript">
if(len != 0) {
var table = document.getElementById('hor-minimalist-b'); // get the table element
var tableBody = table.childNodes[1]; // get the table body
var tableHead = table.childNodes[0]; // get the table head
var thead = document.createElement('th');
var row2 = document.createElement('tr'); // create a new row
var headText = document.createTextNode('Dados');
  thead.scope = "col";
    thead.appendChild(headText);
    row2.appendChild(thead);
    tableHead.appendChild(row2);

for (var i=0; i<len; i++) {

    var row = document.createElement('tr'); // create a new row

    var cell = document.createElement('td'); // create a new cell
    var a = document.createElement('a');
    var cellText = document.createTextNode(localStorage.getItem('key' + i));
    var xyz = "key" + i;    
    a.href = "alterar.html";
    a.onclick = function() { doLocalStorage(xyz) };
    a.appendChild(cellText);
    cell.appendChild(a); // append input to the new cell
    row.appendChild(cell); // append the new cell to the new row
    tableBody.appendChild(row); // append the row to table body
   }}
</script>
</table>

多分私は自分自身をあまりよく説明していません。さらに情報が必要な場合はお問い合わせください。前もって感謝します。エヴァ

4

2 に答える 2

1

キー名をクロージャーに入れてみてください:

function wrapper(i) {
    return function() {
        doLocalStorage("key" + i)
}}
a.onclick = wrapper(i);

于 2012-09-19T16:44:59.813 に答える
1

私があなたの質問を正しく理解したかどうかはわかりませんが、forループを実行するときに変数の使用を非同期にバインドしたい場合は、クロージャでラップする必要があります。

    for(i = 1, c = arr.length; i < c; i++){
      (function(i){
        // i wont change inside this closure so bound events will retain i
        $('#id'+i).click(function(){
          alert(i); // Will alert the corresponding i
        })
      })(i);
    }
于 2012-09-19T16:48:10.150 に答える