Googleのホームページで、要素にフォーカスがない状態でBack Spaceキーを押すと、戻る代わりに検索ツールバーにフォーカスが移動することに注意してください。
どうすればこれを達成できますか?
私は自分のアプリのユーザーでこの問題に遭遇し続けています。それらはどの要素にも焦点を合わせておらず、アプリからそれらをスローするBACKSPACEを押します。
Googleのホームページで、要素にフォーカスがない状態でBack Spaceキーを押すと、戻る代わりに検索ツールバーにフォーカスが移動することに注意してください。
どうすればこれを達成できますか?
私は自分のアプリのユーザーでこの問題に遭遇し続けています。それらはどの要素にも焦点を合わせておらず、アプリからそれらをスローするBACKSPACEを押します。
または:keydown
の外側のバックスペースキーを処理している場合は、イベントハンドラーをバインドして、そのイベントのデフォルトのアクションを防止します。textarea
input
$(document).on("keydown", function (e) {
if (e.which === 8 && !$(e.target).is("input, textarea")) {
e.preventDefault();
}
});
アンドリュー・ウィテカーの答えが本当に好きです。ただし、読み取り専用、ラジオ、またはチェックボックスの入力フィールドにフォーカスされている場合でも戻ることができ、contentEditable 要素ではバックスペースが許可されないため、わずかな変更を加えました。クレジットはアンドリュー・ウィテカーに行きます。
$(document).on("keydown", function (e) {
if (e.which === 8 && !$(e.target).is("input:not([readonly]):not([type=radio]):not([type=checkbox]), textarea, [contentEditable], [contentEditable=true]")) {
e.preventDefault();
}
});
現時点では、[contentEditable] != [contentEditable=true] 以来、HTML にあるすべてのバリエーション [contentEditable] が必要なようです。
Googleがこれを行う方法はちょっとクールです。バックスペースを押すと、テキスト フィールドがフォーカスされ、ユーザーが戻ることができなくなります。
同じことを試すことができます:
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<input id="target" type="text" />
<script type="text/javascript">
$(document).keydown(function(e) { if (e.keyCode == 8) $('#target').focus(); });
</script>
単にナビゲートするのをやめるには、このコードが機能します!
$(document).on("keydown", function (event) {
if (event.keyCode === 8) {
event.preventDefault();
}
});
しかし、これは入力フィールド タイプ text/textarea でも発生します。したがって、これらのフィールドを制限するには、次を使用できます
$(document).on("keydown", function (event) {
if (event.which === 8 && !$(event.target).is("input, textarea")) {
event.preventDefault();
}
});
私の場合、カレンダー用のテキスト フィールドがあり、そのカレンダーをクリックするたびに、日付を選択してバックスペースを押すと、前のページに戻ります。そのフィールドだけを防ぐために、私は単に使用しました
$('#myField').on("keydown", function (event) {
if (event.keyCode === 8 || event.which === 8) {
event.preventDefault();
}
});
私はいくつかを助けるために言及することを考えました;-)
これは古いものですが、これらの回答では、ラジオ ボタンにフォーカスしたときにバックスペースやナビゲートを行うことができます。入力タイプもフィルタリングする必要があります。これに対する上記のすべての回答の功績:
$(document).on("keydown", function (e) {
if (e.which === 8 && !$(e.target).is("input[type='text']:not([readonly]), textarea")) {
e.preventDefault();
}
});
私はインターネット上で多くのコードスニペットを試しましたが、満足のいく結果は得られませんでした。IE (IE11) と Crome の新しいブラウザー バージョンは、以前のソリューションを壊しましたが、IE11 + Crome + Firefox で機能するものは次のとおりです。このコードはバックスペースを防ぎ、ユーザーはテキスト フィールドに入力した内容を失うことはありません。
window.addEventListener('keydown', function (e) {
if (e.keyIdentifier === 'U+0008' || e.keyIdentifier === 'Backspace' || e.keyCode === '8' || document.activeElement !== 'text') {
if (e.target === document.body) {
e.preventDefault();
}
}
}, true);