2

送信する前に JavaScript 関数を実行する html フォームがあります。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;
       }
    });

ある意味では、プログラムによって送信し、後続の一連のイベントを防止しています。

更新: それを変更し、aa 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 に答える