2009-08-03 2 views
9

Я бы хотел, чтобы улавливать двойное нажатие клавиши (например, для Char T), чтобы сделать некоторую специальную обработку. Я бы хотел, чтобы нажатия клавиш выполнялись достаточно быстро, чтобы не интерпретироваться как два отдельных пресса, просто как двойной клик. Любые идеи, как я могу это достичь?Как заблокировать двойное нажатие клавиши в javascript?

ответ

16

При нажатии клавиши (ов) запишите время. Затем сравните его со временем, когда вы отметили последнее время, когда они были поражены.

Если разница находится в пределах вашего порога, считайте ее двойной. В противном случае, не надо. Грубый пример:

var delta = 500; 
var lastKeypressTime = 0; 
function KeyHandler(event) 
{ 
    if (String.fromCharCode(event.charCode).toUpperCase()) == 'T') 
    { 
     var thisKeypressTime = new Date(); 
     if (thisKeypressTime - lastKeypressTime <= delta) 
     { 
     doDoubleKeypress(); 
     // optional - if we'd rather not detect a triple-press 
     // as a second double-press, reset the timestamp 
     thisKeypressTime = 0; 
     } 
     lastKeypressTime = thisKeypressTime; 
    } 
} 
+0

Это решение использует клавишу Ctrl. Он не говорит, что ему это нужно (хотя это имеет смысл для меня). –

+0

** @ Джош Стодола: ** HA! Показывает, насколько осторожен я читаю ... Видел «Char T», читал «Ctrl T» ... oops! – Shog9

+0

отлично работает! – ak3nat0n

10

имеет переменный (возможно first_press), который вы установили в верно, когда происходит событие нажатия клавиши, и запустить таймер, который сбрасывает переменный в ложь после определенного количества времени (однако быстро вы хотите их нажать клавиши).

В случае нажатия клавиши, если эта переменная истинна, у вас есть двойное нажатие.

Пример:

var first_press = false; 
function key_press() { 
    if(first_press) { 
     // they have already clicked once, we have a double 
     do_double_press(); 
     first_press = false; 
    } else { 
     // this is their first key press 
     first_press = true; 

     // if they don't click again in half a second, reset 
     window.setTimeout(function() { first_press = false; }, 500); 
    } 
} 
+0

И вы можете сделать «половину секунды» настраиваемым постоянным значением, которое пользователи могут изменить. Правила юзабилити! – montrealist

+0

-1 Это работает для * каждой * нажатой клавиши. –

+0

Я не пытался предоставить ему решение для вставки. Просто показывая ему общую идею. –

Смежные вопросы