我正在使用一个数组来构建一个插件的回调函数(select2):
假设我告诉我的<select>
元素,当选择某些内容时,应该触发function1
,然后使用提供的参数触发function2
。
然而,当某些事情未被选中时,function3
应被解雇。
初始化<select>
元素时,我使用以下javascript代码。
events = {
'select': Array(
{ function: 'function1' },
{ function: 'function2',
parameters: Array(1,2)
}
),
'unselect': Array(
{ function: 'function3' }
)
}; //this is normally generated dynamically
for (var event in events)
{
var eventGroup=events[event];
jQuery(this).on("select2:"+event, function (e) {
var select=jQuery(e.currentTarget);
var subtype=e.type.split(":")[1];
console.log("Event group is", eventGroup);
for (var i=0;i<eventGroup.length;i++)
{
var functionParams=new Array(e);
if (eventGroup[i]['parameters']) for (var z=0;z<eventGroup[i]['parameters'].length; z++) functionParams.push(eventGroup[i]['parameters'][z]);
if (eventGroup[i]['return']) return window[eventGroup[i]['function']].apply(this, functionParams);
else window[eventGroup[i]['function']].apply(this, functionParams);
}
});
}
事件正确触发,所以这不是插件中的错误,问题是,它们总是触发PHP生成的数组的LAST元素的函数(在本例中为function3)。
因此代码为每个事件创建了两个匿名函数(选择和取消选择),但eventGroup
变量在这两个匿名函数中都是相同的,它始终是分配给它的最后一个值。我一直认为,当我定义一个匿名函数时,它会存储它中使用的变量的值,就像它们在定义时一样,但看起来我错了。
如何将另一个变量附加到匿名函数,这仍然是定义时的变量? (我怎么能将eventGroup
的CURRENT值附加到定义的匿名函数?)