当我尝试使用以下参数附加事件处理函数时:
myhandle.onclick = myfunction(param1,param2);
function myfunction(param1,param2){
}
现在我想在我的处理函数中访问事件对象。网络上提到了一种发送事件对象的方法,如:
myhandle.onclick = myfunction(event,param1,param2);
但是当我测试它时,它的给定事件对象是未定义的。
我知道库使这些东西变得简单,但我正在寻找原生的JS选项。
答案 0 :(得分:7)
myhandle.onclick = myfunction(param1,param2);
这是JavaScript级别的常见初学者错误,而不是图书馆可以真正为您修复的错误。
您没有将myfunction
指定为点击处理程序,您调用 myfunction
,并将param1和param2作为参数,并将函数的返回值指定给{ {1}}。 onclick
不返回任何内容,因此您要将myfunction
分配给undefined
,这将无效。
您的意思是指定onclick
本身的引用:
myfunction
要传递函数一些额外的参数,您必须创建一个包含其值的闭包,这通常使用匿名内联函数完成。如果你需要,它也可以负责传递事件(尽管你需要一个IE的备份计划,其中事件对象不作为参数传递):
myhandle.onclick= myfunction;
在ECMAScript第五版中,这将是JavaScript的未来版本,您可以更轻松地编写它:
myhandle.onclick= function(event) {
myfunction(param1, param2, event);
};
(myhandle.onclick= myfunction.bind(window, param1, param2);
是window
的虚拟值,在这种情况下您不需要。)
但是,由于今天的许多浏览器都不支持第五版,如果要使用此方法,则必须为旧版浏览器提供实现。有些图书馆确实包括一个;这是另一个独立的。
this
答案 1 :(得分:4)
我不完全确定你要做什么,但也许你正在寻找这样的东西?
function myfunction(param1, param2){
return function(event) {
// For compatibility with IE.
if (!event) {
event = window.event;
}
alert("event = " + event + ", param1 = " + param1 + ", param2 = " + param2);
};
}
myhandle.onclick = myfunction(param1, param2);
最终结果是myfunction
内的匿名函数将被称为onclick
处理程序,导致事件加上打印的两个参数。这两个参数在添加事件处理程序时是固定的,而event
每次用户点击myhandle
时都会更改。
答案 2 :(得分:0)
试试这个:
if (!event) { event = window.event; }
myfunction()内部。