注意:当在Google主页上没有聚焦于任何元素时,按 BACKSPACE 键会将焦点放到搜索工具栏中,而不是导航回上一页。
我该如何解决这个问题?
我在我的应用程序中经常遇到用户遇到这个问题。他们没有聚焦在任何元素上,然后按 BACKSPACE 键,从而使他们退出了应用程序。
注意:当在Google主页上没有聚焦于任何元素时,按 BACKSPACE 键会将焦点放到搜索工具栏中,而不是导航回上一页。
我该如何解决这个问题?
我在我的应用程序中经常遇到用户遇到这个问题。他们没有聚焦在任何元素上,然后按 BACKSPACE 键,从而使他们退出了应用程序。
如果我们正在处理位于textarea
或input
之外的退格键,则我将绑定一个事件处理程序到keydown
并防止该事件的默认操作:
$(document).on("keydown", function (e) {
if (e.which === 8 && !$(e.target).is("input, textarea")) {
e.preventDefault();
}
});
我非常喜欢Andrew Whitaker的回答。然而,当聚焦于只读、单选或复选输入字段时,它仍然会导航回去,并且不允许在contentEditable元素上使用退格键,因此我添加了一个轻微的修改。功劳归于Andrew Whitaker。
$(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]。
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>
input
或textarea
上时一直按下BACKSPACE键。但是你的答案也非常有帮助。 - FastTrack$(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]
会使您无法在密码或电子邮件输入字段中删除。我进行了更多测试并更新了我的答案。 - None要停止导航,只需要使用这段代码即可!
$(document).on("keydown", function (event) {
if (event.keyCode === 8) {
event.preventDefault();
}
});
$(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).keydown(function (e) {
var activeInput = $(document.activeElement).is("input[type=text]:not([readonly]):focus, textarea:focus");
if (e.keyCode === 8 && !activeInput) {
return false;
};
});
对于Internet Explorer,这个方法对我有效:
window.addEventListener('keydown', function (e) {
if (e.keyCode === 8) {
if (e.target === document.body) {
e.preventDefault();
}
}
}, true);
我尝试了许多互联网上的代码片段,但都没有令人满意的结果。新版IE(IE11)和Chrome浏览器破坏了我的以前的解决方案,但以下代码适用于IE11 + Chrome + 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);