2013-11-01 58 views
1

我嘗試以下操作:JavaScript的傳遞活動在封閉

f.addEventListener('submit',(function(frm){ 
var func = (function(e){somefunction(e,frm);})(e); 
})(f),false); 

但這種失敗。我想將形式(f)作爲靜態引用傳遞,將動態事件對象傳遞給命名函數'somefunction'。

上面我沒有工作,什麼是通過兩個正確的語法?

回答

4

問題是,每個function s都被立即調用,其中undefined實際上被傳遞到addEventListener()

你會想,而不是沒有它的調用括號中的function S的return一個這樣的事件以後可以稱之爲:

f.addEventListener('submit', (function (frm) { 
    return function (e) { 
     someFunction(e, frm); 
    }; 
})(f), false); 

雖然與事件綁定,你可能不一定需要閉合,作爲<form>將是所述function的上下文(this)通過:

f.addEventListener('submit', someFunction, false); 

function someFunction(e) { 
    var frm = this; 
    // ... 
} 
1

不能確切地確定你正在做什麼,但看起來你正在試圖通過事件處理程序手動傳遞表單。相反,保存的參考,只是指它在處理程序,如

f.addEventListener('submit',function(){ 
    var func = function(e){ 
     somefunction(e,f); 
    }; 
},false); 

你不應該需要自我執行功能,除非我在這裏失去了你的意圖

+0

笑啊,這是更多的是看科幻的ITLL工作型的東西。它周圍肯定有更清潔的方法。 –

+0

gotcha;)有趣的功能 –