Javascript JS IndexedDB闭包/内部函数
我想理解为什么在这个“循环”中,我不能在带有闭包/内部函数的事件中附加元素的键。我知道其他循环会发生什么,比如Javascript JS IndexedDB闭包/内部函数,javascript,indexeddb,Javascript,Indexeddb,我想理解为什么在这个“循环”中,我不能在带有闭包/内部函数的事件中附加元素的键。我知道其他循环会发生什么,比如for,而。。。我不明白在这种情况下这种方法不起作用的真正原因 问:为什么我不能直接传递钥匙 item.transaction(["itens"], "readonly").objectStore("itens").openCursor() .onsuccess = function(e) { var info =
for,而。。。我不明白在这种情况下这种方法不起作用的真正原因
问:为什么我不能直接传递钥匙
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);
};
}
在给出的示例中,您正在为光标的每次迭代覆盖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);
});
它们的行为会有所不同,但可能有助于您了解发生了什么。在给定的示例中,您正在为光标的每次迭代覆盖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);
});
这些行为会有所不同,但可能有助于您了解发生了什么