代码之家  ›  专栏  ›  技术社区  ›  b. e. hollenbeck

用jquery在“enter”上提交表单?

  •  403
  • b. e. hollenbeck  · 技术社区  · 15 年前

    我有一个BOG标准的登录表单——一个电子邮件文本字段、一个密码字段和一个使用html/jquery的air项目的提交按钮。当我点击表单上的Enter时,整个表单的内容将消失,但表单不会被提交。有人知道这是WebKit的问题(AdobeAir使用WebKit作为HTML),还是我把事情搞砸了?

    我试过:

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

    但这既没有停止清算行为,也没有提交表格。没有与表单相关联的操作-这可能是问题吗?我可以在操作中加入一个javascript函数吗?

    14 回复  |  直到 6 年前
        1
  •  350
  •   Community Egal    7 年前
    $('.input').keypress(function (e) {
      if (e.which == 13) {
        $('form#login').submit();
        return false;    //<---- Add this line
      }
    });
    

    注意:您接受了Bendwey的回答,但它的e.PreventDefault()描述不正确。查看此StackOverflow答案: event.preventDefault() vs. return false

    本质上,“返回错误”与调用相同 e.preventDefault e.stopPropagation() .

        2
  •  173
  •   Seb    15 年前

    除了像杰森·科恩所说的那样返回虚假信息。你可能还必须防止违约

    e.preventDefault();
    
        3
  •  77
  •   karim79    15 年前

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

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

    注: jquery('submit').focus()。 按下Enter键时使按钮动画化。

        4
  •  61
  •   Jason Cohen    15 年前

    返回 false 以防止按键继续。

        5
  •  28
  •   Zack The Human    15 年前

    是否有任何理由需要钩住并测试Enter键?

    你不能简单地加一个

    <input type="submit" /> 
    

    到您的表单,并在推送Enter时自然提交?你甚至可以勾住表格 onsubmit 如果需要,可以从中调用验证函数…

    你甚至可以使用 事件 作为一个测试,看看你的表单是否被提交,但是如果你打电话给 form.submit() .

        6
  •  13
  •   Thermech Gandalf    11 年前

    以下是作为jquery插件执行此操作的方法(如果您希望重新使用该功能):

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

    现在,如果要用这种类型的功能来装饰,可以这样简单:

    $('#your-input-id').onEnterKey(
        function() {
            // Do stuff here
        } );
    
        7
  •  12
  •   Jeff Yates    13 年前

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

    然后钩子( .bind .live )窗体 submit 在javascript文件中使用jquery的任何函数的事件。

    下面是一个示例代码:

    HTML

    <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年4月13日起,火狐4.0和jquery 1.4.3就开始运行了。

        8
  •  4
  •   Logan Serman    15 年前

    此外,为了保持可访问性,您应该使用它来确定您的密钥代码:

    c = e.which ? e.which : e.keyCode;
    
    if (c == 13) ...
    
        9
  •  4
  •   Hoàng VÅ© Tgtt    10 年前

    这是我的代码:

      $("#txtMessage").on( "keypress", function(event) {
        if (event.which == 13 && !event.shiftKey) {
            event.preventDefault();
            $("#frSendMessage").submit();
        }
        });
    
        10
  •  3
  •   Joem Maranan    11 年前

    只需添加即可轻松实现。您只需制作一个表单,然后隐藏“提交”按钮:

    例如:

    <form action="submit.php" method="post">
    Name : <input type="text" name="test">
    <input type="submit" style="display: none;">
    </form>
    
        11
  •  2
  •   Dave Chen    11 年前

    我现在用

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

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

        12
  •  1
  •   Milad Ghiravani    7 年前

    在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
            }
        });
    }
    
        13
  •  0
  •   Piemol    6 年前

    我发现今天按下Enter键时不会触发keypress事件,因此您可能希望切换到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”丢失,但按键和键控寄存器代码“13”被按下/释放。 按照 jQuery documentation on the function 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.
    

    在服务器2012 R2上的IE11和FF61上测试

        14
  •  -4
  •   Pang Mohammad Imran    6 年前

    试试这个:

    var form = document.formname;
    
    if($(form).length > 0)
    {
        $(form).keypress(function (e){
            code = e.keyCode ? e.keyCode : e.which;
            if(code.toString() == 13) 
            {
                 formsubmit();
            }
        })
    }