在事件处理程序中访问事件对象

时间:2009-10-13 03:30:14

标签: javascript javascript-events

当我尝试使用以下参数附加事件处理函数时:

myhandle.onclick = myfunction(param1,param2);

function myfunction(param1,param2){
}

现在我想在我的处理函数中访问事件对象。网络上提到了一种发送事件对象的方法,如:

myhandle.onclick = myfunction(event,param1,param2);

但是当我测试它时,它的给定事件对象是未定义的。

我知道库使这些东西变得简单,但我正在寻找原生的JS选项。

3 个答案:

答案 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()内部。