كيفية التقاط تكرار المفتاح مع جافا سكريبت [مكررة]

StackOverflow https://stackoverflow.com/questions/2540335

سؤال

لدي asp.net شكل و آسيا والمحيط الهادئ: مربع النص.لدي مشكلة عندما يضغط المستخدم ويحمل مفتاح أسفل.يختار المستخدم مربع النص ثم يضغط ويحمل '9' حتى يملأ مربع النص بـ 9 ثوان.

هل هناك أي طريقة للكشف عن هذا الوضع?هل هناك طريقة لإيقاف تكرار المفتاح عند الضغط على المفتاح?

هل كانت مفيدة؟

المحلول

باستخدام مسج ، هل يمكن أن تفعل شيئا من هذا القبيل:

<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 الحدث هو الحدث الوحيد الذي سيتم إطلاقه في جميع المتصفحات الرئيسية لـ AutoRepeats و 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;
        }
    }
};

باستخدام معالج أحداث 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

هذا مثال بسيط على كيفية قفل تكرار المفتاح باستخدام 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top