2016-03-08 95 views
0

我想在回调函数中使用变量值,但在写入函数时无法获取变量的原始值。获取原始变量值

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.. 
    } 
} 

此代码应该去throught捡拾对象两次,其中id的值是第一个“日期选择器”,并在第二轮“日期选择器 - 2”,但是当回调被称为ID总是第二个值“datepicker - 2”,对于picker [0] .on()回调,我需要它是第一个(“datepicker”)。

我认为这是因为当执行回调代码时读取变量的值,并且那时它具有最后一个值。

这将是一个合理的解决方法?

最佳,

Alari

回答

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"); 
      }, 
     }); 
} 

这是因为当非同步回调处理程序执行时,只有ID会(因为由于event-loop model)只有最后一个值将被使用。