我正在寻找一种交叉浏览器解决方案来处理回车,从文本框提交输入。
我目前的问题是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。
答案 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
}
}