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;
}
}
});