0

複数のボタンが付いたフォームを実装しようとしています。Enterキーを押すと、デフォルトのボタンが送信されます。http://greatwebguy.com/programming/dom/default-html-button-submit-on-enter-with-jquery/のこのコードは、通常、次のように機能します。

$(function() {
$("form input").keypress(function (e) {
    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
        $('button[type=submit].default').click();
        return false;
    } else {
        return true;
    }
});

});

しかし...入力フィールドに入力するとオートコンプリートポップアップが表示されるので、このポップアップでEnterキーを押すと、すべてのフォームを送信するのではなく、この値を入力フィールドに入力する必要があります。この入力がポップアップからのものかどうかをどうにかして確認できますか?それとも私はこれを別の方法でやろうとすべきですか?

編集:私はそれを明確に言っていなかったと思います。このポップアップはjqueryの一部ではありません。これは、以前に入力されたデータを入力に表示する標準のポップアップです。したがって、クラスもIDもありません。伝播の停止も機能しません。以下の解決策はどれもこの問題を解決しません

4

4 に答える 4

0

:visibleオートコンプリートのドロップダウンdivが開いているかどうかを確認し、コードのEnterキーアクションが完了しないようにするために使用できます。このようなもの:

$("form input").keypress(function(e) {
    var key = e.which || e.keyCode;
    if (key == 13 && !$(".autocomplete").is(":visible")) {
        e.preventDefault();
        $('form').submit();
    }
});

event.stopPropagation()オートコンプリート機能のEnterキーを押して使用することもできますが、ソースを手動で修正する必要がある場合がありますが、これは理想的ではありません。

于 2012-05-21T14:03:05.247 に答える
0

return false;

書きます

e.preventDefault();

または

e.stopPropagation();

于 2012-05-21T14:03:32.267 に答える
0
 $("form input").keypress(function (e) {
                if (e.target.id !== "autoCompliteId" && ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))) {
                    $('button[type=submit].default').click();

                    return false;
                } else {
                    return true;
                }
            });
于 2012-05-21T14:08:54.787 に答える
0

コードを変更しましたが、動作するようになりました。コマンドにOperationという列挙型があり、すべての送信ボタンの前にフィールドの異なる値を設定します。例:

<input type="submit" value="do sth" onclick="setOperationAndSubmit('DO_STH')"/>
<input type="submit" value="next" onclick="setOperationAndSubmit('DEFAULT')"/>

function setOperationAndSubmit(operation) {
    if (document.myForm.elements['operation'].value === '') {
        document.myForm.elements['operation'].value = operation;
    }
    document.myForm.submit();
}

次に、キーの押下をリッスンするアクションがあり、すべてのEnterキーで適切な操作が設定されます。

$(function() {
    $("form input").keypress(function(e) {
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
            document.myForm.elements['operation'].value = 'DEFAULT';
        }
    });
});

したがって、Enterキーを押すと、デフォルトのアクションが実行されます

于 2012-05-22T13:34:37.660 に答える