在'Enter'与jQuery ?

我有一个沼泽标准的登录表单-一个电子邮件文本字段,一个密码字段和一个提交按钮的AIR项目,使用HTML/jQuery。当我在表单上按Enter键时,整个表单的内容消失了,但表单没有提交。有人知道这是Webkit的问题吗(Adobe AIR使用Webkit进行HTML),还是我把事情搞砸了?

我试着:

$('.input').keypress(function (e) {
if (e.which == 13) {
$('form#login').submit();
}
});

但是这既没有停止清除行为,也没有提交表单。没有与表单相关的操作——这可能是问题所在吗?我可以把一个javascript函数的行动?

529238 次浏览

返回false以防止继续击键。

除了返回false,正如Jason Cohen提到的。你可能还需要preventDefault

e.preventDefault();

有什么理由你必须钩子和测试输入键吗?

你就不能简单地加一个

<input type="submit" />

到您的形式,并有它自然提交时,进入是按?你甚至可以钩子表单的onsubmit动作,并从那里调用验证函数,如果你想…

你甚至可以使用onsubmit作为测试,看看你的表单是否被提交,但如果你调用form.submit(),它将不起作用。

不知道这是否有帮助,但您可以尝试模拟单击提交按钮,而不是直接提交表单。我在生产中有以下代码,它可以正常工作:

    $('.input').keypress(function(e) {
if(e.which == 13) {
jQuery(this).blur();
jQuery('#submit').focus().click();
}
});

注意:当按下回车键时,jQuery(“#提交”).focus ()使按钮动画化。

同样为了保持可访问性,你应该使用这个来确定你的键码:

c = e.which ? e.which : e.keyCode;


if (c == 13) ...

我现在用的

$("form").submit(function(event){
...
}

首先,我在提交按钮中添加了一个事件处理程序,它为我产生了一个错误。

您也可以简单地将onsubmit="return false"添加到页面中的表单代码中,以防止默认行为。

然后在javascript文件中用jQuery将表单的submit事件钩子(.bind.live)到任意函数。

下面是一个示例代码来提供帮助:

超文本标记语言

<form id="search_form" onsubmit="return false">
<input type="text" id="search_field"/>
<input type="button" id="search_btn" value="SEARCH"/>
</form>

Javascript + jQuery

$(document).ready(function() {


$('#search_form').live("submit", function() {
any_function()
});
});

这是在2011-04-13,Firefox 4.0和jQuery 1.4.3中运行的

试试这个:

var form = document.formname;


if($(form).length > 0)
{
$(form).keypress(function (e){
code = e.keyCode ? e.keyCode : e.which;
if(code.toString() == 13)
{
formsubmit();
}
})
}
$('.input').keypress(function (e) {
if (e.which == 13) {
$('form#login').submit();
return false;    //<---- Add this line
}
});

查看这个stackoverflow的答案: event.preventDefault() vs. return false < / p >

本质上,"return false"等同于调用e.preventDefaulte.stopPropagation()

下面是一种用JQuery插件来实现这个功能的方法(以防你想重用这个功能):

$.fn.onEnterKey =
function( closure ) {
$(this).keypress(
function( event ) {
var code = event.keyCode ? event.keyCode : event.which;


if (code == 13) {
closure();
return false;
}
} );
}

现在,如果你想用这种类型的功能装饰<input>元素,它就像这样简单:

$('#your-input-id').onEnterKey(
function() {
// Do stuff here
} );

只是为了便于实现而添加。你可以简单地创建一个表单,然后隐藏提交按钮:

例如:

<form action="submit.php" method="post">
Name : <input type="text" name="test">
<input type="submit" style="display: none;">
</form>

这是我的代码:

  $("#txtMessage").on( "keypress", function(event) {
if (event.which == 13 && !event.shiftKey) {
event.preventDefault();
$("#frSendMessage").submit();
}
});

在HTML代码中:

<form action="POST" onsubmit="ajax_submit();return false;">
<b>First Name:</b> <input type="text" name="firstname" id="firstname">
<br>
<b>Last Name:</b> <input type="text" name="lastname" id="lastname">
<br>
<input type="submit" name="send" onclick="ajax_submit();">
</form>

在Js代码中:

function ajax_submit()
{
$.ajax({
url: "submit.php",
type: "POST",
data: {
firstname: $("#firstname").val(),
lastname: $("#lastname").val()
},
dataType: "JSON",
success: function (jsonStr) {
// another codes when result is success
}
});
}

我发现今天按回车键时,按键事件没有被触发,所以你可能想要切换到keydown()或keyup()代替。

我的测试脚本:

        $('.module input').keydown(function (e) {
var keyCode = e.which;
console.log("keydown ("+keyCode+")")
if (keyCode == 13) {
console.log("enter");
return false;
}
});
$('.module input').keyup(function (e) {
var keyCode = e.which;
console.log("keyup ("+keyCode+")")
if (keyCode == 13) {
console.log("enter");
return false;
}
});
$('.module input').keypress(function (e) {
var keyCode = e.which;
console.log("keypress ("+keyCode+")");
if (keyCode == 13) {
console.log("Enter");
return false;
}
});

在键盘上输入“A Enter B”时控制台的输出:

keydown (65)
keypress (97)
keyup (65)


keydown (13)
enter
keyup (13)
enter


keydown (66)
keypress (98)
keyup (66)
你可以看到在第二个序列中'keypress'丢失了,但是keydown和keyup寄存器代码'13'被按下/释放。 根据jQuery关于keypress()函数的文档:

.
Note: as the keypress event isn't covered by any official specification, the actual behavior encountered when using it may differ across browsers, browser versions, and platforms.

在Server 2012 R2上的IE11和FF61上测试

因为可能晚了 但是你可以在html中添加下面的行:-

<input onkeyup="submitForm(event)" oninput="addTextName(this)" type="text" id="name-val">

并将其添加到js文件中

function submitForm(e) {
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 13){
toggleNextScreen();
}

键码13表示回车

$('form#login').keypress(function (e) {
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 13)
{
e.preventDefault();
$('form#login').submit();
return false;
}
});