我试图在回调函数中使用变量值,但是当写入函数时无法获得变量的原始值。
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值首先是"datepicker“,在第二次运行时是"datepicker--2”,但是当回调被调用时,id总是第二个值“Datepicker-2”,对于picker.on()回调,我需要它成为第一个值("datepicker")。
我认为这是因为在执行回调代码时读取了变量的值,并且到那时它有了最后一个值。
什么是合理的解决办法呢?
最好的
阿拉里
发布于 2016-03-08 10:18:02
您需要将内部异步调用重构为函数。
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");
},
});
}这是因为在执行异步回调处理程序时,只有id才会使用最后一个值(因为有事件循环模型)。
https://stackoverflow.com/questions/35864588
复制相似问题