myhandle.onclick = myfunction(param1,param2);
這是JavaScript級別的常見初學者錯誤,而不是庫可以真正爲您解決的問題。
您還沒有分配myfunction
作爲一個單擊處理程序,你調用myfunction
,用參數1和參數作爲參數,函數的返回值分配給onclick
。 myfunction
不返回任何東西,所以你會被分配到undefined
onclick
,這將沒有任何效果..
你是什麼意思是一個引用賦予myfunction
本身:
myhandle.onclick= myfunction;
要通過函數一些額外的參數,你必須做一個包含它們值的閉包,這通常是使用匿名內聯函數完成的。它可以通過事件上太多,如果你需要(儘管無論哪種方式,你需要在事件對象不作爲參數傳遞的IE備份計劃)的護理:
myhandle.onclick= function(event) {
myfunction(param1, param2, event);
};
在ECMAScript中第五版,這將是JavaScript的未來版本中,你甚至可以更輕鬆地寫:(與window
是用於this
虛值,你就不會在這種情況下需要)
myhandle.onclick= myfunction.bind(window, param1, param2);
然而,由於今天的許多瀏覽器都沒有t支持第五版,如果你想使用這種方法,你必須爲舊版瀏覽器提供一個實現。一些圖書館已經包括一個;這是另一個獨立的。
if (!('bind' in Function.prototype)) {
Function.prototype.bind= function(owner) {
var that= this;
var args= Array.prototype.slice.call(arguments, 1);
return function() {
return that.apply(owner,
args.length===0? arguments : arguments.length===0? args :
args.concat(Array.prototype.slice.call(arguments, 0))
);
};
};
}
非常感謝!這很好地解釋了我。 – Rajat 2009-10-13 05:41:59