Firefox onkeydown检测按键

时间:2009-03-13 10:08:28

标签: javascript html firefox

从输入文本我需要调用一个函数来捕获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; 
     ...    
} 

但是我无法为firefox传递我的参数和所需的事件参数。有什么建议吗?

5 个答案:

答案 0 :(得分:9)

我昨天写了这篇文章,在FF和IE中工作=&gt;

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

你想用[你的输入] .onkeydown

替换document.onkeydown

答案 1 :(得分:7)

我在firefox中使用它并且它可以工作:

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

然后是js funcion:

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

答案 2 :(得分:7)

除了必要的“event”参数之外,所提出的解决方案都没有像我需要的那样添加我自己的参数来获取keyCode。无论如何,帮助,谢谢你们。我为未来的读者提出了最终解决方案:

最后我只需要向调用者添加“event”参数:

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

和处理程序:

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

以前它不起作用,我不知道为什么。

答案 3 :(得分:1)

这里结合了获取事件和keyCode的另一个转折:

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

答案 4 :(得分: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