我正在开发一个带有phonegap的Android应用程序。我正在制作一个HTML表格,其中包含一些来自localStorage的for
循环。我需要为每一行存储for
的索引i,以便从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>
也许我不是在解释自己。如果您需要更多信息,请询问。提前致谢。 EVA
答案 0 :(得分:1)
尝试将密钥名称放入闭包中:
function wrapper(i) {
return function() {
doLocalStorage("key" + i)
}}
a.onclick = wrapper(i);
答案 1 :(得分: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);
}