0

我正在开发一个带有phonegap的android应用程序。我正在制作一个 HTML 表格,其中包含一些for来自 localStorage 的循环。对于每一行,我需要存储索引 ifor以使用它从 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 回答