myhandle.onclick = myfunction(param1,param2);
这是JavaScript初学者常见的错误,也不是库可以为您修复的问题。
您没有将myfunction
分配为单击处理程序,而是使用param1和param2作为参数调用myfunction
,并将函数的返回值分配给onclick
。 myfunction
不返回任何内容,因此您将分配undefined
给onclick
,这将没有任何效果。
您的意思是要将对myfunction
本身的引用分配:
myhandle.onclick= myfunction;
为了向函数传递一些额外的参数,您需要创建一个包含它们值的闭包,通常使用匿名内联函数来完成。如果需要,它还可以处理传递事件(尽管无论如何,您都需要为 IE 准备备用方案,因为该事件对象不作为参数传递):
myhandle.onclick= function(event) {
myfunction(param1, param2, event);
};
在ECMAScript第五版中,它也是JavaScript的未来版本,你可以更轻松地写出这个代码:
myhandle.onclick= myfunction.bind(window, param1, param2);
(使用
window
作为这个情况下不需要的
this
的虚拟值。)然而,由于许多现代浏览器不支持第五版,如果你想使用这种方法,就必须为旧版浏览器提供实现。有些库已经包含了一个实现;这里是另一个独立的实现。
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))
);
};
};
}