交叉浏览器keydown处理回车?

时间:2012-04-17 08:43:52

标签: javascript jquery cross-browser

我正在寻找一种交叉浏览器解决方案来处理回车,从文本框提交输入。

我目前的问题是firefox ......

javascript事件未定义

<input id="myinput" type="text" onkeydown="press();" value="X"/>

<script type="text/javascript">
function press() {
    if (event.keyCode == 13) {
    // do something
    }
}
<script>

我可以使用jquery。

4 个答案:

答案 0 :(得分:8)

event来自哪里? : - )

以下是您正在寻找的解决方案:

// First, change the HTML to:
<input id="myinput" type="text" onkeydown="return press( event );" value="X" />

// Then, on the JS part:
function press( e ) {
    var evt = e || window.event
    // "e" is the standard behavior (FF, Chrome, Safari, Opera),
    // while "window.event" (or "event") is IE's behavior
    if ( evt.keyCode === 13 ) {
        // Do something

        // You can disable the form submission this way:
        return false
    }
}

请注意在此函数和HTML事件中使用return来阻止表单提交(这是在表单字段中按[Enter]时的默认行为)。

但是,我建议删除HTML中的javascript部分,然后直接使用:

document.getElementById('myinput').onkeydown = function( e ) {
    // Your code
}

这允许您拥有unobtrusive javascript

对于jQuery方式,这将是以下内容:

$('#myinput').on( 'keydown', function( e ) {
    // jQuery normalizes the "e" parameter, so you can use:
    if ( e.keyCode === 13 ) {
        // Do something
    }
} )

P.S。:event实际上与window.event相同,这是IE的正确用法。这不是标准,其他浏览器(FF,Chrome ......)使用。这就是我们使用提供的技巧(var evt = e || window.event,其中e作为参数传递)的原因。

答案 1 :(得分:1)

首先,您必须在函数调用中的函数定义中定义event以用于FF / Chrome / Opera / .. (onkeydown

HTML:

<form method="POST" action="/">
<input id="myinput" type="text" onkeydown="return press( event )" value="X"/>
</form>

JavaScript:

function press(e) {
    // IE uses "window.event", others pass the event as argument
    var evt = e || window.event;
    if (evt.keyCode == 13) {
        // do something
        alert("enter!");

        return false;
    }
}

请注意在HTML标记中的函数调用中使用return阻止表单提交,这是在表单内的输入中按Enter 时的默认行为。

答案 2 :(得分:0)

$('#myinput').keypress(function(e){
      if(e.which == 13){
         //do something.
         e.preventDefault();
       }  
});

答案 3 :(得分:0)

您需要声明将传递给您的函数的事件参数:

function press(event) {
    if (event.keyCode == 13) {
    // do something
    }
}