2008-11-28 7 views
0

В этом сокращенном коде, рядное событие работ - «событие» передаются функции testKeyPressFirefox: передать событие из анонимных Javascript функции

<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 
    } 
} 

Однако в этой анонимной версии, это событие не прошло in 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}; 
    } 

Как пройти собственное мероприятие функции?

ответ

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

+0

Ваше решение сработало для меня. :-) – 2008-11-28 21:07:02

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}; 
}