禁用页面上存在的所有 keyup/keydown/keypressed 事件

问题描述 投票:0回答:7

我的页面上有很多关键事件。有没有办法禁用页面上出现的所有

keyup
/
keydown
/
keypress
事件,而不是单独禁用每个事件?

我正在寻找使用 Javascript 或 jQuery 的解决方案。

javascript jquery
7个回答
16
投票

可以这样做,尽管我预计它在较大的页面上可能会非常慢:

$('*').off('keyup keydown keypress');

这将选择页面上的每个元素,然后删除绑定到它们的所有

keyup
keydown
keypress
事件。

如果您想阻止用户使用 backspace 键导航到上一页,您可以尝试以下代码:

var inputTags = ['INPUT', 'TEXTAREA'];

$(document).on('keypress', function(e) {
    if(e.which === 8 && $.inArray(e.target.tagName, inputTags) === -1)
        e.preventDefault();
});

这应该限制退格键的使用,除非焦点是可以输入文本的输入元素(因此

<input type="text">
<textarea>
)。

看看这个工作演示


3
投票

尝试

$(document).find('*').off('keyup keydown keypressed');

并且您应该将其放入

$(document).ready()
块中,在页面上加载所有 JS 之后(例如在
</body>
标签之前)。


2
投票

可以使用preventDefault()函数来解决


2
投票
$('*').unbind('keyup keydown keypress')

0
投票

对我来说这个组合有效:

开启按键事件

$(document).keypress(function(){
// Code
});

为了关闭此事件,我使用了:

$(document).off('keypress');


0
投票

$(elem).off('keypress.jstree')

我最近也遇到了这个问题,因为我正在向树节点添加编辑功能。 通过查看源代码,我注意到有一个事件

keypress.jstree
被绑定了 500 毫秒的超时。

只需在初始化树后添加上述

off
绑定即可立即解决我的所有问题! 这既适用于静态树结构,也适用于加载了 ajax 数据的树。 我目前使用的版本是3.3.5

希望这有帮助。


-1
投票

此代码使用 substr 删除 TextBox2 中最后按下的键。

 `$("#TextBox2").val($("#TextBox2").val().substr(0, ($("#TextBox2").val().length-1)));`
  //removes last letter pressed.
© www.soinside.com 2019 - 2024. All rights reserved.