关于在Firefox中的事件处理问题,
怎样在Firefox中处理键盘事件?
我定义了一个键盘响应函数,
var doKeyDown=function(srcNode){......}
其中参数srcNode为传入的节点对象。
在IE中工作正常,因为我可以直接获取window.event
属性及其属性值。
我从网上查到一些资料,都说可以让事件对象
以参数形式传入响应函数,但是网上都是原来的函数
没有参数的情况下,而我的函数已经有了一个
参数该怎么处理???
我试着把响应函数改成这样:
var doKeyDown=function(srcNode,e){......}
然后在函数里获取,然而当我用alert(arguments.length);
语句测试时发现只传入了一个参数给响应函数,
请问这是为什么?
始终获取不到事件对象e的值,有人知道怎么解决吗???

解决方案 »

  1.   

    关键不是参数取名叫 “e”
    document.onkeydown = function (e) {}
    ...
    document.onkeydown = function (a) {}
    document.onkeydown = function (b) {}
    document.onkeydown = function (c) {}
    而是第一个参数。
      

  2.   

    但是我把函数代码写成这样
    var doKeyDown=function(e,srcNode){......} 
    也不行啊!!!
    用alert(arguments.length);测试显示只传进了一个参数。 
      

  3.   

    onkeydown只处理一个参数,可以使用闭包等解决。var srcNode = $("xx");
    document.onkeydown = function (e) {
        alert(srcNode);
      

  4.   


    function KeyUp(e) {
    var keyc;
    if(window.event) {
    keyc=e.keyCode;
    } else if(e.which) {
    keyc=e.which;
    }
    alert(keyc);
    }<input type="text" onkeyup="KeyUp(event)"/>
    可以使用多个参数的,如:KeyUp(this.value,event)
      

  5.   

    不太明白,能再说清楚点吗?我的srcNode是函数的一个参数,是可以动态改变的啊!
    var  srcNode= $("xx"); 不是获取定值吗?
      

  6.   

    可以在函数内读取驱动事件的第一个参数。
    ===============================<input type='button' value='click me' onclick="doKeyDown('a')"/>
    <script type="text/javascript">
    var doKeyDown = function(arg){
    var _e = window.event || arguments.callee.caller.arguments[0]; 
    alert(_e);
    alert(arg);
    }
    </script>
      

  7.   

    arguments.callee.caller.arguments[0]; 
    请问上面这句代码是什么意思啊?
    怎么是callee又是caller的啊?
    我不太明白,没有用过callee和caller
    不知道它们是什么意思。
    ,具体怎么使用callee和caller啊?
    还有就是我用alert(arguments.length);测试了一下
    返回值怎么还是1而不是2啊???
      

  8.   

    <input type='button' value='click me' id='a_x' onclick="doKeyDown('a')"/>
    <script type="text/javascript">
    var doKeyDown = function(arg){
    alert(arguments.callee.caller.toString());//这样是不是一目了然了?argument.callee就是函数本身,caller函数的调用函数.具体请google.
    var _e = window.event || arguments.callee.caller.arguments[0]; 
    alert(_e);
    alert(arg);
    }
    </script>
      

  9.   


    var a = function(){
    b();
    }var b = function(){
    alert(arguments.callee)
    alert(arguments.callee.caller);
    }
    a();
      

  10.   

    但是我用alert(arguments.length);测试了一下 
    返回值怎么还是1而不是2啊??? 
      

  11.   

    真晕,lz.....
    你到底有没有看alert(arguments.callee.caller.toString());这个东西?
    根据我的例子,ie下输出
    ===================function anonymous()
    {
      doKeyDown('a');
    }
    ff下输出
    ===================function onclick(event)
    {
      doKeyDown('a');
    }看到没?你想要的event是作为doKeyDown的caller的第一个也是唯一一个参数。你在doKeyDown函数里alert(argument.length),当然是1,难道是2?
      

  12.   

    不好意思!!!
    再次打扰了!!!
    我的意思是我用alert(arguments.length);测试了一下 
    返回值是1,就是说传进了一个参数,但是这个参数是event
    对象还是字符串'a'啊?
    event对象加上字符串'a'不应该是2吗?
      

  13.   

    有那么复杂吗?
    直接在你的绑定函数上修改
    yourobj.onkeydown=function(e){
        var a=yourobj.a;
        handleKeyDown(a,e);
    }或者
    yourobj.onkeydown=function(e){
        var evt=e||window.event;
        var srcEl=evt.target||srcEl.srcElement;
        var nKeyCode=evt.which||evt.keyCode;
        var a=yourobj.a;
        ......
    }没那么麻烦
      

  14.   

    我的键盘事件处理函数为
    var doKeyDown=function(srcNode){......} 
    其中参数srcNode为传入的节点对象。 
    调用时这样调用的:
    doKeyDown(node);
    而且我的关于处理event对象的代码也都在里面,
    以前在IE上正常显示
    (因为IE不用获取事件对象,可以直接使用,所以对于IE来说参数无所谓),
    现在要求Firefox也正常显示(但是Firefox却要求首先获取事件对象,
    才能对事件作进一步的处理,所以对于Firefox来说参数真的很重要)
    ,真的不太好弄啊!!!
      

  15.   

    有了event对象了srcNode不就有了吗?