i是个全局变量,但同时还是个全局活动对象,ajax的回调函数执行时只会取i的最终值。即:
不管你划过aAllPrice[0]还是aAllPrice[1]、[2]....,ajax回调函数中的“[i]”始终是“[aAllPrice.length]”,“allAllPrice[aAllPrice.length]”当然不存在,所以是undefined。修一下即可://红色为对照原代码修改或添的部分
for (i = 0; i < aAllPrice.length; i++)
{
aAllPrice[i].index = i;
(function(n){
aAllPrice[n].onmouseover = function ()
{
//this.style.cursor = 'default'; ajax(systemUrl + '/mytests/getAllPrice/' + this.getAttribute('value'), function (data) {
alert(aAllPrice[n].innerHTML);
});
}
})(i);
}
不管你划过aAllPrice[0]还是aAllPrice[1]、[2]....,ajax回调函数中的“[i]”始终是“[aAllPrice.length]”,“allAllPrice[aAllPrice.length]”当然不存在,所以是undefined。修一下即可://红色为对照原代码修改或添的部分
for (i = 0; i < aAllPrice.length; i++)
{
aAllPrice[i].index = i;
(function(n){
aAllPrice[n].onmouseover = function ()
{
//this.style.cursor = 'default'; ajax(systemUrl + '/mytests/getAllPrice/' + this.getAttribute('value'), function (data) {
alert(aAllPrice[n].innerHTML);
});
}
})(i);
}
{
aAllPrice[i].index = i;
(function(n){
aAllPrice[n].onmouseover = function ()
{
//this.style.cursor = 'default';
ajax(systemUrl + '/mytests/getAllPrice/' + this.getAttribute('value'), function (data) {
alert(aAllPrice[n].innerHTML);
});
}
})(i);
}
首先,你这个并不是闭包,主要是由于js的执行机制和活动对象的特性。
其次,红色部分主要是添加了一个匿名函数自执行 并且在执行的时候把当前i作为参数传入函数。
关于“闭包”和“活动对象”自己google一下,网上有很多资料。至于系统的学习js,每个人的学习方法 习惯都不同,不过基本上主要是多看书,多动手,多看一些优质博客和论坛。你可以发个帖子征求下建议 看看大家都是怎么学的?