按下退格键时,似乎没有触发jQuery keyup,keydown或keypress方法。如何捕获退格键?
答案 0 :(得分:73)
试试这个:
$('html').keyup(function(e){if(e.keyCode == 8)alert('backspace trapped')})
答案 1 :(得分:12)
常规javascript可用于捕获退格键。您可以使用event.keyCode方法。键码是8,所以代码看起来像这样:
if (event.keyCode == 8) {
// Do stuff...
}
如果要同时检查[删除](46)以及[退格](8)键,请使用以下命令:
if (event.keyCode == 8 || event.keyCode == 46) {
// Do stuff...
}
答案 2 :(得分:4)
使用与上面相同的想法,但稍微概括一下。 由于退格应该在输入元素上正常工作,但如果焦点是段落或其他内容则不应该工作,因为它在那里页面往往会返回到历史记录中的上一页。
$('html').on('keydown' , function(event) {
if(! $(event.target).is('input')) {
console.log(event.which);
//event.preventDefault();
if(event.which == 8) {
// alert('backspace pressed');
return false;
}
}
});
return false => event.preventDefault和event.stopPropagation都有效。
答案 3 :(得分:3)
大多数浏览器退格的默认行为是返回上一页。如果您不想要此行为,则需要确保调用preventDefault()
。然而,正如OP所提到的,如果你总是称之为preventDefault()
,你也将无法删除文本字段中的内容。下面的代码有一个改编自this answer的解决方案。
此外,不是使用硬编码的keyCode值(某些值会根据您的浏览器而改变,尽管我还没有发现Backspace或Delete都是如此),jQuery has keyCode constants已经定义了。这使您的代码更具可读性,并为您处理任何keyCode不一致。
// Bind keydown event to this function. Replace document with jQuery selector
// to only bind to that element.
$(document).keydown(function(e){
// Use jquery's constants rather than an unintuitive magic number.
// $.ui.keyCode.DELETE is also available. <- See how constants are better than '46'?
if (e.keyCode == $.ui.keyCode.BACKSPACE) {
// Filters out events coming from any of the following tags so Backspace
// will work when typing text, but not take the page back otherwise.
var rx = /INPUT|SELECT|TEXTAREA/i;
if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
e.preventDefault();
}
// Add your code here.
}
});