バックスペースキーで戻ることができないようにするにはどうすればいいですか? 質問する

バックスペースキーで戻ることができないようにするにはどうすればいいですか? 質問する

IEでは、(ひどく非標準だが動作する)jQueryでこれを行うことができます。

if ($.browser.msie)
    $(document).keydown(function(e) { if (e.keyCode == 8) window.event.keyCode = 0;});

しかし、Firefox で動作する方法で実行したり、ボーナスとしてクロスブラウザで実行したりすることは可能ですか?

記録のために:

$(document).keydown(function(e) { if (e.keyCode == 8) e.stopPropagation(); });

何もしません。

$(document).keydown(function(e) { if (e.keyCode == 8) e.preventDefault(); });

問題は解決しますが、ページ上でバックスペース キーが使用できなくなり、元の動作よりもさらに悪くなります。

編集: 私がこれをする理由は、単純な Web ページではなく、大規模なアプリケーションを作成しているからです。間違った場所でバックスペースを押したために 10 分間の作業が無駄になるのは非常に迷惑です。バックスペース キーによる戻りを禁止することで、ミスを防ぐこととユーザーを困らせることの比率は 1000/1 をはるかに超えるはずです。

編集2:履歴ナビゲーションを防止しようとしているのではなく、事故を防止しようとしているだけです。

編集3: @brentonstrinesのコメント(質問が人気なのでここに移動しました): これは長期的な「修正」ですが、Webkit でこの動作を変更する Chromium のバグ

ベストアンサー1

このコードは、少なくとも IE と Firefox では問題を解決します (他のブラウザではテストしていませんが、他のブラウザでも問題が発生する場合は、このコードが機能する可能性は十分にあると考えています)。

// Prevent the backspace key from navigating back.
$(document).unbind('keydown').bind('keydown', function (event) {
    if (event.keyCode === 8) {
        var doPrevent = true;
        var types = ["text", "password", "file", "search", "email", "number", "date", "color", "datetime", "datetime-local", "month", "range", "search", "tel", "time", "url", "week"];
        var d = $(event.srcElement || event.target);
        var disabled = d.prop("readonly") || d.prop("disabled");
        if (!disabled) {
            if (d[0].isContentEditable) {
                doPrevent = false;
            } else if (d.is("input")) {
                var type = d.attr("type");
                if (type) {
                    type = type.toLowerCase();
                }
                if (types.indexOf(type) > -1) {
                    doPrevent = false;
                }
            } else if (d.is("textarea")) {
                doPrevent = false;
            }
        }
        if (doPrevent) {
            event.preventDefault();
            return false;
        }
    }
});

おすすめ記事