我相信我的代码中出现了循环关闭问题。我读过这篇文章 ,这对我很有帮助。最近我想出了一个类似于文章中引用的“使用闭包循环”部分的问题。我已经尝试过他们的解决方案,但仍然没有解决我的问题。我一直在到处寻找解决方案,但我总是在文章中找到解决方案。
我正在使用 jqueryui 使一些 lis 可拖动,当我将它们放入容器中时,我需要使用特定于该 li 的变量(节点)。问题是节点(和索引)总是最后一个(因此是闭包问题)。
这是我的代码(我已经简化了一点,以便更容易识别问题):
function makeDraggable(node, i) {
$("#rightTab li#" + node.id).draggable({
containment: 'div#container',
stack: 'div#container',
scroll: false,
revert: 'invalid',
helper: function() {
return $(this).children().clone();
},
start: function(event, ui) {
$(this).children().css('opacity', 0);
},
stop: function(event, ui) {
$(this).children().css('opacity', 1);
}
});
$("#vis").droppable({
drop: test(node, i)
});
}
function test(noder, index) {
return function(event, ui) {
alert(index);
//stuff with node.
}
}
function appendInfo(nodes) {
for(var i = 0; i < nodes.length; i++) {
$("#rightTab #content ul").append("<li id=" + nodes[i].id + "><div></div></li>");
if(visualization.hasImageLabel) {
interfaceHandler.handleImageLabel(nodes[i]);
}
if(visualization.hasTextLabel) {
interfaceHandler.handleTextLabel(nodes[i]);
}
makeDraggable(nodes[i], i);
}
}
当我提醒索引(在函数测试中)它总是打印 9(最大数组长度)时,节点也总是最后一个。
(抱歉英语不好)