我希望当一个键被长时间按下时,它不会被多次输入。
ejemplo:
tecla tiempo resultado
a 3seg a
我制作了这段代码,但它不起作用,请使用所有 3 个事件。
var texto=document.getElementById("texto");
var pulsado=false;
texto.addEventListener('keydown', function(keyboardEvent) {
if(pulsado) return false;
pulsado=true;
});
texto.addEventListener('keypress', function(keyboardEvent) {
if(!pulsado){
}
});
texto.addEventListener('keyup', function(keyboardEvent) {
pulsado=false;
});
<textarea id="texto"></textarea>
我们需要知道用户何时重复按键,而不是时间。为此,我们使用KeyboardEvent.repeat属性,当键没有被抬起并按住时返回 true,生成连续的击键。
适配不同版本的 Internet Explorer
IE 仍然是规则的例外(-多么奇怪,对吧?)。在这种情况下,当我们将事件与 关联时
addEventListener()
,IE 总是返回KeyboardEvent.repeat == false
。相反,它在使用attachEvent时返回正确的值......但还有更多,从 IE11 开始不推荐使用 attachEvent,没有直接的解决方案。因此,为了解决第二个问题,我们使用X-UA-Compatible legacy 模式的 meta 标签:
<meta http-equiv="X-UA-Compatible" content="IE=10" />
。当然,我们还为您通常想要重复的键(退格键、del、箭头、home 等)添加了一些例外。
* 对于 IE 8 - 必须使用 Array.prototype.IndexOf() 的Polyfill。
Demo subida a un hosting gratuito
为了解决这个问题,我要做的是检查每个键是否被按下,而不是一个,然后我将字母列表添加到一个对象,设置一个属性,如
letras["f"]=true
,当键被释放时,它设置为false
,这是必要的条件能够再次拧紧。由于我们在与@Mariano 聊天,他提供了一种解决方案,只检测字母而不检测Backspace等特殊键。这意味着,由于Backspace这个词有 9 个字符长而不是 1,所以它可以正常工作,而字母可以自定义。
当按下一个键并且长度为 1 时:
如果之前已按下该键,请避免重复键入,
如果未标记为已按下,则键入该字母,然后将其标记为已按下。
在这里,我让您的示例正常工作,如果您有任何其他要求,可能需要进行其他修饰。基本上,它是关于正确使用键盘事件,并考虑首先执行哪个事件:
试试这个,添加更多代码来实现结果。
值得一提的是我使用jquery和javascript
您不需要使用所有三个事件,只需重置文本区域,使其始终恢复到开始时的状态。像这样的东西:
在 html 中,您只会告诉它在按下键时做出反应:
现在每次文本区域中有更多字母时,它们都不会显示,除了最后一个被按下的字母
我们创建一个变量,当用户按下一个键时,keydown 函数将验证变量的状态,如果是则
true
取消重复,否则将忽略并成为true
变量,当用户释放它时,该变量将成为false
.这是我的例子: