javascript - onclick函数的参数

标签 javascript raphael

使用 RaphaelJS 库绘制一组圆。

对于每个圆圈,我想创建一个传递变量的 onclick 函数,但在这个函数中我的变量未定义。

问题是什么?

这是我的代码:

//children is an array such as [1,2,4[5,6,7]]
for (var i = 0; i < children.length; i++) {
    var array = children;
    alert("ARRAY[0]===" + array[0])

    var st = space2Draw.set();
    st.push(space2Draw.circle(xChildren, yChildren, 20).click(function (array) {
        //array[i] is undefined
        alert("ARRAY[i]===" + array[i]);
        //retrive(array[i]);
    }),
    LineRoot(xRadice, yRadice, xChildren, yChildren, space2Draw));
    space2Draw.text(xChildren, yChildren, children[i]).attr({
        fill: "white"
    });
    st.attr({
        fill: "red"
    });

    xChildren += 50;
}

最佳答案

您的点击回调不应包含“数组”参数,它会覆盖父范围中的“数组”变量。您只需删除该参数就可以了。

我认为您还会遇到另一个问题,因为我在您的点击回调中始终是children.length(因为函数作用域实际上将在循环结束时关闭。更多信息 here )。您应该创建一个辅助函数来为您创建回调。

你可以尝试这样的事情:

//children is an array such as [1,2,4[5,6,7]]
for (var i = 0; i < children.length; i++) {
    var array = children;
    alert("ARRAY[0]===" + array[0])

    var st = space2Draw.set();
    st.push(space2Draw.circle(xChildren, yChildren, 20).click(getCallback(array , i)),
    LineRoot(xRadice, yRadice, xChildren, yChildren, space2Draw));
    space2Draw.text(xChildren, yChildren, children[i]).attr({
        fill: "white"
    });
    st.attr({
        fill: "red"
    });

    xChildren += 50;
}

function getCallback(array , i){
   return function () {
        alert("ARRAY[i]===" + array[i]);
    }
}

关于javascript - onclick函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300372/

相关文章:

javascript - 如何将 chrome.alarms.getAll 回调设置为变量?

javascript - 解析 THREE.js json 网格格式法线错误

javascript - 将日期格式转换为字符串 Javascript

javascript - 用 Raphael JS 填充外圆

javascript - Raphael js无法通过引用div创建 Canvas

javascript - 剑道 UI 网格 : I lose pagination after datasource refresh

javascript - 仅当下拉元素存在时才显示 tr/td 元素

javascript - 从外部方法调用时 RaphaelJS animate 不起作用

javascript - Raphael JS 翻转图像

raphael - 拉斐尔的元素组