在下面的代碼,TrueThis.aChoices[i]['CallBack']
是當創建click事件和 「假」 時,單擊事件實際發生的功能。如何獲取click事件處理程序的函數引用?
我的對象:
ATK.MultiChoiceDialog = function() {
var TrueThis = this;
var aChoices;
this.Show = function(sTitle,sPrompt,aChoices){
this.aChoices = aChoices;
var HTML = '[snip]';
$('body').append(HTML);
for(var i in this.aChoices)
{
console.log(TrueThis.aChoices[i]['CallBack']); // shows "function"
$('#ATKDialogButton'+i).click(function(e){
console.log(TrueThis.aChoices[i]['CallBack']); // shows "false" ???
if(TrueThis.aChoices[i]['CallBack'])
{
TrueThis.aChoices[i]['CallBack'].call(aChoices[i]['Context']);
}
});
}
}
};
我也試過這樣:
for(var i in this.aChoices)
{
var CB = TrueThis.aChoices[i]['CallBack'];
console.log(CB); // function
$('#ATKDialogButton'+i).click(function(e){
console.log(CB); // false
if(TrueThis.aChoices[i]['CallBack'])
{
TrueThis.aChoices[i]['CallBack'].call(aChoices[i]['Context']);
}
});
}
我正在遞增到i的最後一個值,所以對於所有點擊事件,我將是最後一個迭代的項目,而不是事件綁定時的最後一個項目。 –
如果您需要在循環中的處理程序的回調函數中使用循環變量的值,則應該將該綁定封裝在發送該變量的閉包中,或者創建一個將該變量作爲參數並調用的單獨函數循環中的函數 – MrOBrian
@ruakh搜索「臭名昭着的循環問題」 –