如何使用javascript捕获密钥重复

时间:2010-03-29 18:31:50

标签: javascript html keyevent html-input

我有一个asp.net表单和一个asp:textbox。当用户按下并按下HOLDS键时,我遇到了问题。用户选择文本框,然后按住'9'直到文本框填充9s。

有没有办法检测到这种情况? 当按下按键时,有没有办法停止按键重复?

4 个答案:

答案 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事件的值,这会让事情变得复杂。

演示: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;
        }
    }
};

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