2

我有一个 html 表单,它在提交之前运行一个 javascript 函数。form标签的html是:

<form onsubmit="return sub();" method="post" action="useclick.php">

提交按钮的html是:

<input type="submit" value="Submit" id="submit"/>

一切正常,但我希望用户能够在任何地方按 Enter 并提交表单,所以我有这段代码:

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

这正是我在除 IE 之外的所有浏览器中想要的。在 IE 中,它确实单击了提交按钮,并发送了表单,但它没有首先运行 sub() 函数。在 IE 8 和 10 中也是如此,这是我目前可以访问的唯一版本。

为了完整起见, sub() 函数如下所示:

function sub(){
    document.getElementsByName('coords')[0].value = JSON.stringify(coordsArray);
    return true;
}

我对 javascript 很陌生,对 jQuery 也很陌生,所以任何帮助都会非常有用。

4

2 回答 2

3

你有没有尝试过:

$(document).keypress(function(e) {
       if(e.which == 13) {
        $(this).blur();
        $('#your_form_id').submit();
        return false;
       }
    });

从某种意义上说,您正在以编程方式提交并阻止后续的事件链。

更新: 更改它并制作了一个 JSFiddle来演示。请让我知道这对你有没有用。

<h2>Form</h2>
<form action="" method="post" id="myform">
   First Name:<input type="text" name="Fname" maxlength="12" size="12"/> <br/>
   Last Name:<input type="text" name="Lname" maxlength="36" size="12"/> <br/>

   <p><input id="submit" type="submit" /></p>
</form>
<h2>JSON</h2>
<pre id="result">
</pre>
<script>
            $.fn.serializeObject = function()
            {
                var o = {};
                var a = this.serializeArray();
                $.each(a, function() {
                    if (o[this.name] !== undefined) {
                        if (!o[this.name].push) {
                            o[this.name] = [o[this.name]];
                        }
                        o[this.name].push(this.value || '');
                    } else {
                        o[this.name] = this.value || '';
                    }
                });
                return o;
            };
            $(' input').keypress(function(e) {
                if(e.which == 13) {
                    console.log('Enter pressed');
                    $('#submit').blur();
                    $('#myform').submit();
                    e.preventDefault();
                    return false;
                }
            });
            $(function() {
                $('form').submit(function() {
                    console.log('submitted');
                    $('#result').text(JSON.stringify($('form').serializeObject()));
                    return false;
                });
            });
</script>

更新 #2 嗨,您需要确保绑定到要收听的元素。在这种情况下,您的文档中的所有元素。一般来说,要收听关键事件,这些元素应该是可聚焦的。在这个新的JSFiddle中,如前所述附加了 enter press 事件。确保首先关注(阅读:单击)文档中的任何位置。让我知道事情的后续。

更新 #3 添加了这个JSFiddle以确保主体集中并具有 tabIndex。如果这对您有用,请接受答案。

于 2013-07-17T17:18:12.487 回答
0

IE 对脚本类型很严格。所以确保使用type="text/javascript".

例如:

<script type="text/javascript" src="script.js"></script>
于 2015-11-20T11:35:35.697 回答