1

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

有没有办法检测到这种情况?有没有办法在按住键时停止键重复?

4

4 回答 4

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;
        });
    });
于 2010-03-29T18:53:45.500 回答
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;
        }
    }
};
于 2010-03-30T09:13:46.573 回答
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;
}
于 2010-03-29T19:20:17.207 回答
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的链接

于 2010-03-29T18:48:58.543 回答