使用 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/