防止 BACKSPACE 使用 jQuery 返回导航(如 Google 的主页)

IT技术 javascript jquery
2021-02-20 16:08:14

请注意,在 Google 主页上,不关注任何元素时,按 BACKSPACE 会将焦点放在搜索工具栏中,而不是向后导航。

我怎样才能做到这一点?

我的应用程序中的用户一直遇到这个问题。他们没有关注任何元素并点击 BACKSPACE 将他们扔出应用程序。

6个回答

keydown如果我们正在处理 a textareaor之外的退格键,我会将事件处理程序绑定到并阻止该事件的默认操作input

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input, textarea")) {
        e.preventDefault();
    }
});
@muhammadkashif:你有什么问题?我刚刚在 FF 17.0.1 中尝试过,没有任何问题......
2021-05-04 16:08:14
就我而言,我有一个页面作为弹出窗口在另一个页面内打开。当我按下退格按钮时,它会关闭弹出窗口并将我重定向到上一页。这只发生在 FireFox 中。我通过将 keydown 替换为 keypress 来处理它。但是仍然在所有控件都被禁用的页面上,Firefox 没有捕获按键事件。你能帮我吗?
2021-05-08 16:08:14
为什么要添加&& !$(e.target).is("input, textarea")额外的行,@FastTrack 总是尽量缩短代码
2021-05-09 16:08:14
我刚看到 J.Money 的回答。正在尝试。
2021-05-12 16:08:14
某人:我选择这个答案是因为它会一直阻止 BACKSPACE,除非焦点在input或 上textarea
2021-05-15 16:08:14

我真的很喜欢安德鲁·惠特克的回答。但是,当专注于只读、单选或复选框输入字段时,它仍会向后导航,并且不允许在 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();
    }
});

目前似乎有必要拥有 HTML 中的每个变体 [contentEditable],因为 [contentEditable] != [contentEditable=true]。

在 IE 中测试正常。谢谢
2021-05-13 16:08:14
这可以更好地处理单选按钮,谢谢。使用 $(document).bind("keyup keydown") 只是为了确保是一种很好的做法。
2021-05-15 16:08:14

谷歌这样做的方式有点酷。当您按退格键时,它们会聚焦文本字段,防止用户返回!

你可以试试同样的:

<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>

演示:http : //jsfiddle.net/epinapala/TxG5p/

@J.Money - 我同意,但请理解我是在回答 OP 的问题。如果必须做出假设才能回答一个问题,那么可能会有成千上万个答案:)
2021-04-29 16:08:14
随时!我只是想解释谷歌是如何做到这一点的(我认为它是一样的)。:)
2021-05-12 16:08:14
谢谢@Somebodyisintrouble :)
2021-05-12 16:08:14
谢谢你的回答!我选择上面的那个只是因为它会一直阻止 BACKSPACE 除非焦点是inputtextarea但是你的回答也很有帮助。
2021-05-16 16:08:14
尽管这适用于 1 个输入字段并且 Google 主页只有一个输入字段,但它不能用于具有 1 个以上输入的页面,因为删除文本会导致该字段将焦点切换到 #target。这就是为什么 Andrew Whitaker 的答案是更好的解决方案。
2021-05-16 16:08:14

这是一个在 IE、Chrome 和 Firefox 上测试的简单解决方案。

$(document).on("keydown", function (event) {
// Chrome & Firefox || Internet Explorer
if (document.activeElement === document.body || document.activeElement === document.body.parentElement) {
    // SPACE (32) o BACKSPACE (8)
    if (event.keyCode === 32 || event.keyCode === 8) {
        event.preventDefault();
    }
}});

这是旧的,但这些答案仍然允许您在关注单选按钮时退格和导航。您还需要过滤输入类型。归功于以上所有答案:

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input[type='text']:not([readonly]), textarea")) {
        e.preventDefault();
    }
});
很好的捕获,但最好input:not([type=radio])具体指定,因为input[type=text]这样可以使您无法在密码或电子邮件输入字段中删除。我做了更多测试并更新了我的答案。
2021-05-02 16:08:14