我试图在回调函数中使用变量值,但在写入函数时无法获取变量的原始值。
for (i=0; i<2; i++) {
if ($.type(picker[i]) == "object") {
var id = picker[i].$root[0].id;
picker[i].on({
set: function() {
alert("#" + id + " .picker__holder");
},
});
// other code..
}
}
这段代码应该经过两次选择器对象,其中id值是第一个&#34; datepicker&#34;并在第二次运行&#34; datepicker - 2&#34;但是当调用回调时,id始终是第二个值&#34; datepicker - 2&#34;拾取器[0] .on()回调的位置我需要它作为第一个(&#34; datepicker&#34;)。
我认为这是因为在执行回调代码时会读取变量的值,到那时它会有最后一个值。
对此有什么合理的解决方法?
最佳,
Alari
答案 0 :(得分:1)
您需要将内部异步调用重构为函数。
for (i=0; i<2; i++) {
if ($.type(picker[i]) == "object") {
var id = picker[i].$root[0].id;
// other code..
asynhCall(picker, i, id);
}
}
function asynhCall(picker, i, id)
{
picker[i].on({
set: function() {
alert("#" + id + " .picker__holder");
},
});
}
这是因为在执行asynch-callback处理程序时,只有id才会使用最后一个值(因为event-loop model)。