javascript - 使用闭包 : Not working? 循环(使用 jqueryui)

标签 javascript jquery jquery-ui closures

我相信我在我的代码中遇到了循环关闭问题。我读过 this article 这是一个很大的帮助。最近我想出了一个类似于文章中引用的“闭包循环”部分的问题。我已经尝试了他们的解决方案,但它仍然没有解决我的问题。我一直在到处寻找解决方案,但总能在文章中找到解决方案。

我正在使用 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(最大数组长度),节点也总是最后一个。

(抱歉英语不好)

最佳答案

您在循环的每次迭代中调用 $("#vis").droppable({...})。这设置了 10 个 drop 事件处理程序;只有最后一个被触发,它作为参数传递 (node_nine, 9)。

检查回调中 ui.draggable 的值;它会告诉您丢弃的元素是什么。

关于javascript - 使用闭包 : Not working? 循环(使用 jqueryui),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270722/

相关文章:

javascript - 用变量替换字符串中的所有实例作为搜索 - JavaScript

javascript - 使用 JavaScript/jQuery 显示来自未标记字段的 JSON 数据

javascript - 如何在 Pylons 中翻译 javascript 文件

javascript - 未捕获的 HierarchyRequestError 为 "jQuery Ui Sortable"

jquery-ui - 如何在 jQuery 日期选择器中显示 nextText/prevText?

javascript - 使用带有 jQ​​uery 的 casperjs 来填写表单

javascript - 无法在node js中使用post请求

javascript - 使用变量 + 按钮更改图像位置

javascript - 为什么我不能使用 JQuery style() 函数设置此 CSS 设置?

javascript - IE7 模态对话框 - 定位错误?