Firefox:从匿名javascript函数传递事件

时间:2008-11-28 19:02:31

标签: anonymous-function event-handling event-passthrough

在这个缩写代码中,内联事件有效 - “事件”传递给testKeyPress函数

<textarea id="source"
    onkeydown= "showCursPos(this); 
    var tf=testKeyPress(event);
    document.onkeypress=function(){return tf};
    document.onkeydown=function(){return tf}; " ></textarea>

function testKeyPress(e){
    if (e.ctrlKey==true ){
        if (e.which == null ){kcode=e.keyCode; }  // IE
        else if (e.which > 0){kcode=e.which; }    // gecko
        return testValidity(kcode);   //returns true-false
    }
}

但是,在这个匿名版本中,事件不会在gecko中传递:

<textarea id="source"></textarea>

$("source").onkeydown = function(){ 
    showCursPos(this);  // this function works
    // next event is passed in IE, but not gecko
    var tf=testKeyPress(event); 
    // remaining functions work if value is forced
    document.onkeypress=function(){return tf}; 
    document.onkeydown=function(){return tf}; 
    }

如何传递函数自己的事件?

2 个答案:

答案 0 :(得分:3)

是的,有一个事件对象作为参数。

你可以通过

获得它
var e=arguments[0] || event; // Firefox via the argument, but IE don't

我不知道他们是否完全相同,但我将<xxx onkeydown="func(event);">视为xxx.ononkeydown=function(event){func(event);};

参考event @ Mozilla.org

答案 1 :(得分:0)

像魅力一样工作。对我的原始代码的这种修改成功地将事件从匿名函数传递到我的四个浏览器中的命名函数:IE6,FF2,NS7.2,OP9.22

$("source").onkeydown = function(){ 
    var e=arguments[0] || event; 
    showCursPos(this);  
    var tf=testKeyPress(e); 
    document.onkeypress=function(){return tf}; 
    document.onkeydown=function(){return tf}; 
}