كيفية التقاط تكرار المفتاح مع جافا سكريبت [مكررة]
-
23-09-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
لدي 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;
}