0

2つのテキストフィールドを持つフォームがありonLoad="document.forms.obrazac.sifra.focus()"、最初のフィールドにカーソルを置きます。ここで、ユーザーがEnterキーを押してカーソルを2番目のフィールドにフォーカスし、Enterキーをもう一度押すと、フォームを送信したいと思います。どうすればそれができますか、ありがとう。

4

4 に答える 4

2

デフォルトの動作を破ることは間違いなく良くありません。ところで、autofocusHTMLの属性を知っていますか?

どうしてもこれが必要な場合は、次のようにします。

document.forms.obrazac.onkeypress = function( e ) {
    // If the hit key is "Enter"
    if ( e.keyCode === 13 ) {

        // Cross-browser handling for our dear friend @MaxArt :p
        var evt = e || window.event,
            target = evt.target || evt.srcElement,

        // Find the next input
            nextInput = target.nextSibling;
        while ( nextInput.tagName !== 'INPUT' && nextInput.nextSibling ) {
            nextInput = nextInput.nextSibling;
        }

        // And focus it
        nextInput.focus();

        // Finally, disable submitting IF there is no input after
        if ( nextInput !== this.elements[ this.elements.length - 1 ] ) {
            return false;
        }
    }
};
于 2012-05-22T14:45:31.020 に答える
1

ほんの短い、実際にはないtestetサンプル...あなたにアイデアを与えるためだけに:

<head>
    <script type="text/javascript">
    function onKeyPress(args)
    {
        if(args.keyCode === 13)
            document.getElementById("tb2").focus();
    }       
    </script>
</head>
<body>
    <input type="text" onkeypress="onKeyPress(event);" id="tb1" />
    <input type="text" id="tb2" />
</body>

tb2でも同じことを実行して、「ENTER」でフォームを送信できます。また、jQueryのようなものを使用して、マークアップで直接ではなく、javascriptでイベントをバインドします。

それが役に立てば幸い。

@答えがないところにサンプルを作成し始めたので=)

于 2012-05-22T15:07:21.717 に答える
0

私はデフォルトの振る舞いを破ることはしません、それはユーザーにとってかなり迷惑で直感に反します、しかしあなたが本当にそれをしたいのなら、あなたはjqueryでこのようなことをすることができます:

$('#form').keydown(function(e) {
    if( e.keyCode === 13) {  // When "Shift + Enter"
        e.preventDefault();
        // focus on next field here.
    }
});

これを行う代わりに、次のように(tabindexを使用して)正しいタブ順序を作成する方がよいでしょう。

<input type="text" name="field1" tabindex=1 /><br />
于 2012-05-22T14:48:39.760 に答える
-1

これを試して:

document.forms.obrazac.sifra.addEventListener("keyup", function(e) {
    if (e.keyCode === 13) { // 13 === enter key
        e.preventDefault();
        this.nextSibling.focus();
    }
});

これらのことに注意してください:

  1. 私はを使用addEventListenerしましたが、IE8以前では、グローバルオブジェクトを使用attachEvent("onkeyup"...してチェックする必要があります。eventまたe.preventDefault();e.returnValue = false;
  2. それthis.nextSiblingが次の分野だと思いました。DOMに合うようにこれを修正してください。
于 2012-05-22T14:46:55.733 に答える