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

我试着:

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

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


当前回答

我发现今天按回车键时,按键事件没有被触发,所以你可能想要切换到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表示回车

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

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

if (c == 13) ...
$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
    return false;    //<---- Add this line
  }
});

看看这个stackoverflow的答案: event.preventDefault() vs. return false

从本质上讲,"return false"与调用e.c opreventdefault和e.c ostoppropagation()相同。

这是我的代码:

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

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

例如:

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