我遇到了这个问题。我有这个代码(字符串的形式为:'var1,var2,var3',someIdArray是一个包含一些id的数组):
function myFunction1(variable,string)
{
var myArray = string.split(',');
for (i=0;i<myArray.length;i++)
{
for (j=0;j<someIdArray[j].length;j++)
{
document.getElementById(someIdArray[j]).onclick=function() { myFunction2(variable,myArray[i]) };
}
}
}
function myFunction2(variable1,variable2)
{
alert(variable1);
alert(variable2);
}
现在当我在someIdArray中单击一个带有id的元素时,myFunction2会运行,并且当我将它放在myFunction1中时我得到variable1,但是variable2是未定义的。如何确保我为单击的元素定义的onclick具有固定变量?
答案 0 :(得分:1)
试试这样:
function myFunction1(variable,string)
{
var myArray = string.split(',');
for (var i=0;i<myArray.length;i++)
{
for (var j=0;j<someIdArray.length;j++)
{
document.getElementById(someIdArray[j]).onclick=function()
{
var localI = i;
myFunction2(variable,myArray[localI]);
}
}
}
}
function myFunction2(variable1,variable2)
{
alert(variable1);
alert(variable2);
}
您的代码中的问题是i
和j
是全局变量,因为您没有向其添加var
关键字。
因此,您将一个增加到myArray.length
的全局变量传递给函数。
如果您执行myArray[myArray.length]
,则会获得undefined
。
我在上面的代码中所做的是存储一个封装在onClick
函数范围内的局部变量。
另一种方式是:
for (var i=0;i<myArray.length;i++)
{
for (var j=0;j<someIdArray.length;j++)
{
var myArrayIElement = myArray[i];
document.getElementById(someIdArray[j]).onclick=function()
{
myFunction2(variable,myArrayIElement);
}
}
}
在这里,您使用myArray[i]
中的值创建一个变量,并将其传递给onClick
函数,而不是将i
传递给函数。
答案 1 :(得分:0)
问题是你内在的循环:
for (j=0;j<someIdArray[j].length;j++)
你可能想要someIdArray.length
而不是j
元素的长度
答案 2 :(得分:0)
此处更正的代码,这是范围问题, 你做了两件错事, 1.你得到的someIdArray长度是错误的 2.没有分配数组元素并传递给click事件
function myFunction1(variable, string) {
var myArray = string.split(',');
for (var i = 0; i < myArray.length; i++) {
var arrEle = myArray[i];
for (var j = 0; j < someIdArray.length; j++) {
document.getElementById(someIdArray[j]).onclick = function() {
myFunction2(variable, arrEle);
};
}
}
}
function myFunction2(variable1, variable2) {
alert(variable1);
alert(variable2);
}