我有一个 asp.net 表单和一个 asp:textbox。当用户按下并按住某个键时,我遇到了问题。用户选择文本框,然后按住“9”直到文本框填满 9。
有没有办法检测到这种情况?有没有办法在按住键时停止键重复?
我有一个 asp.net 表单和一个 asp:textbox。当用户按下并按住某个键时,我遇到了问题。用户选择文本框,然后按住“9”直到文本框填满 9。
有没有办法检测到这种情况?有没有办法在按住键时停止键重复?
使用 jquery,您可以执行以下操作:
<script type="text/javascript">
var allowKey = true;
$(function () {
$("#one").keydown(function (e) {
if (!allowKey) {
e.preventDefault();
}
allowKey = false;
});
$("#one").keyup(function () {
allowKey = true;
});
});
</script>
<input id="one" />
更新的错误修复:
var keyCount = 0;
$(function () {
$("#one").keypress(function (e) {
if (keyCount > 1) {
e.preventDefault();
}
keyCount++;
});
$("#one").keyup(function () {
keyCount = 0;
});
});
以下内容可防止“正常”键(即生成文本输入的键)的自动重复按键,即使同时按下多个键也是如此。请注意,该keypress
事件是所有主流浏览器中唯一肯定会触发自动重复keyCode
的事件,并且事件的值keydown
不会与相应事件的charCode
/which
值相同keypress
,这会使事情变得有些复杂。
演示:http: //jsfiddle.net/KRJ5m/
代码:
var textBox = document.getElementById("my_textbox");
var lastKeyDown, keyIsPressed = {}, keyCodeForCharCode = {},
charCodeForKeyCode = {};
textBox.onkeydown = function(evt) {
evt = evt || window.event;
lastKeyDown = evt.keyCode;
};
textBox.onkeyup = function(evt) {
evt = evt || window.event;
var charCode = charCodeForKeyCode[evt.keyCode];
if (charCode) {
keyIsPressed[charCode] = false;
}
};
textBox.onkeypress = function(evt) {
evt = evt || window.event;
var keyCode, charCode = evt.which || evt.keyCode;
if (keyIsPressed[charCode]) {
// This keypress is an autorepeat
return false;
} else {
keyIsPressed[charCode] = true;
// Get the key code for the corresponding keydown event
keyCode = keyCodeForCharCode[charCode];
if (!keyCode) {
// Create two-way mapping for keyCode and charCode
keyCodeForCharCode[charCode] = lastKeyDown;
charCodeForKeyCode[lastKeyDown] = charCode;
}
}
};
这是一个简单的示例,说明我如何使用纯 JavaScript 锁定键重复:
var lock = false;
document.onkeyup = onKeyUpHandler;
document.onkeypress = onKeyPressHandler;
function onKeyUpHandler() {
lock = false;
}
function onKeyPressHandler(e) {
if (!e)
e = window.event;
var code = e.keyCode || e.which;
if (lock != false) {
e.returnValue = false;
if (e.preventDefault) {
e.preventDefault();
}
}
lock = true;
}
使用 YUI 的事件处理程序,你可以做这样的事情
var count = 0;
var kl = new YAHOO.util.KeyListener(document,{keys:27},
{
fn:function(e){
if (count > 9){
YAHOO.util.Event.preventDefault(e);
// call a function here to do something
}
else count++;
}
);
这样就可以解决问题,然后一旦您完成操作,请确保将计数设置回 0。
这是示例http://developer.yahoo.com/yui/examples/container/keylistener.html的链接