我想理解为什么在这个"循环"我无法在具有闭包/内部函数的事件中附加元素的键。我知道像for,while
这样的其他循环会发生什么......我不明白为什么在这种情况下这种方法不起作用的真正原因。
问:为什么我不能直接传递密钥?
item.transaction(["itens"], "readonly").objectStore("itens").openCursor()
.onsuccess = function(e) {
var info = e.target.result;
if (info) {
var div = document.createElement("div");
var img = document.createElement("img");
var h2 = document.createElement("h2");
img.src = "../imagens/misc/" + info.value.image;
h2.innerHTML = info.value.title;
div.appendChild(h2);
div.onclick = function() {
//always the lasy key.
console.log(info.key);
};
div.appendChild(img);
box.appendChild(div);
info.continue();
}
};
我知道解决方案的类型有效......
bt.onclick = (function(index) {
return function (){console.log('iterator: ' + index);}
})(i);
with ({ n: i }) {
bt.onclick = function(index) {
console.log('iterator: ' + n);
};
}
答案 0 :(得分:2)
在给出的示例中,您将为光标的每次迭代重写div.onclick
。
如果将其更改为:
,可能会更清楚console.log('overwriting onclick handler to log: ' + info.key);
div.onclick = function() {
console.log(info.key);
};
或者,不要覆盖:
console.log('adding onclick listener to log: ' + info.key);
div.addEventListener('click', function() {
console.log(info.key);
});
这些行为会有所不同,但也许可以帮助您了解正在发生的事情。