如何使用jQuery捕获退格键?

时间:2011-02-08 16:36:01

标签: jquery

按下退格键时,似乎没有触发jQuery keyup,keydown或keypress方法。如何捕获退格键?

4 个答案:

答案 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.
     }
});