Firefox onkeydown检测按下的键。

9

我需要从一个输入文本中调用一个函数来捕获onkeydown事件,并且我需要向该事件传递一个参数,例如:

<input type="text" onkeydown="TextOnKeyDown('myPrefix');" />...

那么在该函数中,我需要知道按下了哪个键。我使用

function TextOnKeyDown(prefix) {
    var key = event.keyCode; 
    ...
}

这在IE中运行得很好,但在Firefox中不行。我读过,在Firefox中你必须向处理程序传递一个参数,然后使用它来获取键,类似于:

<input type="text" onkeydown="detectKey(event)"/>
...
function detectKey(e){
     var key = (document.all) ? e.keyCode : e.which; 
     ...    
} 

但是我不能在火狐浏览器中传递我的参数和所需的事件参数。有什么建议吗?

5个回答

9

我昨天写了这个代码,可以在Firefox和IE中使用 =>

//execute this during initialization
document.onkeydown = function(event) {
    var holder;
    //IE uses this
    if(window.event) {
        holder = window.event.keyCode;
    }
    //FF uses this
    else {
        holder = event.which;
    } 
    keyz(holder);
}

function keyz(key) {
    if(key === /*desired code*/) {
        /*execute stuff*/
    }
}

您需要将 document.onkeydown 替换为 [您的输入].onkeydown


7

我在火狐浏览器中使用这个方法,它有效:

<input .... onkeypress="return isNumberKey(event);">

接下来是JS函数:

function isNumberKey(evt)
{
    var charCode = (evt.which) ? evt.which : evt.keyCode
    if(charCode==37||charCode==39||charCode==46)return true;
    if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;

    return true;
}

7

所有提出的解决方案都没有起作用,因为我需要添加自己的参数,除了Firefox需要的“event”参数外,以获取keyCode。无论如何,感谢大家的帮助。我为未来的读者提供最终解决方案:

最后,我只需要在调用者中添加“event”参数即可:

<input type="text" onkeydown="TextOnKeyDown('myPrefix', event);" />

以及处理程序:

function TextOnKeyDown(prefix, evt) {    
   var key = (evt.which) ? evt.which : evt.keyCode;
...
}

之前不知道为什么,它就是不起作用。


1

这里有一个小技巧,可以同时获取事件和按键代码:

function calledOnKeypress(winEvent) {
    var keyCode;
    // event passed as param in Firefox, not IE where it's defined as window.event
    if(!winEvent) {
        winEvent = window.event;
        keyCode = winEvent.keyCode;
    }
    else { // ff
        keyCode = winEvent.which;
    }
}

0

你可以使用 arguments[0]

<input type="text" onkeydown="detectKey(arguments[0])"/>

为了在其中获取IE事件,你可以这样做:
<input type="text" onkeydown="detectKey(arguments[0] ? arguments[0] : event)"/>

或者将您的 detectKey(e) 函数更改为检查是否设置了 e,如果没有,则使用 event

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接