我有一个asp.net表单和一个asp:textbox。当用户按下并按下HOLDS键时,我遇到了问题。用户选择文本框,然后按住'9'直到文本框填充9s。
有没有办法检测到这种情况? 当按下按键时,有没有办法停止按键重复?
答案 0 :(得分:2)
使用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;
});
});
答案 1 :(得分:1)
以下内容可防止“正常”键(即生成文本输入的键)的自动重复按键,即使同时按下多个键也是如此。请注意,keypress
事件是所有主流浏览器中针对自动重复播放的唯一事件,keyCode
事件的keydown
值与charCode
不同} / which
相应keypress
事件的值,这会让事情变得复杂。
代码:
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;
}
}
};
答案 2 :(得分:0)
使用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
的链接答案 3 :(得分:0)
这是一个简单的例子,说明如何用普通的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;
}