2012-03-13 13 views
8

Witam wszystkich i po prostu podniósł jQueryZatrzymaj naciśnięcie klawisza od wstrzymania. (JQuery)

Więc moje pytanie brzmi: chcę zatrzymać klucz od powtarzania kiedy przytrzymać

Przykład: Edit (chcę go zatrzymać .. więc 1 postać za naciśnięciem klawisza/keyDown)

przyciśnięcie: a

HoldDown: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Mój kod to:

<input type='text'> 

var stop= false; 
var time =null; 
$(':text').keypress(function(e) { 
if(stop === true){e.preventDefault();} 
    if (time !== null) { 
     lastkey = time; 
    } 
    time = new Date().getTime(); 
    var between = time - lastkey; 
    if (between <= 70) { 
     stop = true; 
    } 
}); 
$(':text').keyup(function(){stop = false;}); 

Czy podążam w tym kierunku w niewłaściwy sposób?

+1

Możliwy duplikat [Prevent JavaScript keyDown od obsługiwanego wielokrotnie podczas przytrzymany] (http://stackoverflow.com/questions/6087959/prevent-javascript -theydown-event-from-being-handle-multiple-times-while-held-do) – Isti115

Odpowiedz

4

Spróbuj tego: http://jsfiddle.net/maniator/yFA8c/

To pozwoli tylko do nas na każde 2 sekundy.

Kod:

var mult = false, 
    prev = 0; 

$('.mult').keydown(function(e) { 
    if (!mult) { 
     mult = true; 
     prev = e.which; 
     setTimeout(function() { 
      mult = false; 
     }, 2000) 
    } 
    else if (prev != e.which) { 
     mult = false; 
    } 
    else { 
     return false; 
    } 
})​;​ 
+0

Dlaczego zamiast tego nie używaj .keyup()? Oczywiście, piszesz tylko wtedy, gdy ją zwolnisz, ale wątpię, by rozróżnienie było zbyt ważne dla większości osób piszących z normalną prędkością. –

+0

zamiast tego, aby zapobiec "x" sekundom, po prostu wyłącz zdarzenie keydown, jeśli wcześniej został naciśnięty ten sam klawisz, tak jak zrobiłem to –

+0

@RafaelVerger, który jest już w moim kodzie ... – Neal

8

pomocą wiązania .keyup() zamiast .keypress().

+0

jeśli używane jest tylko zdarzenie keyup, nie można zablokować domyślnych akcji dla zdarzeń keydown i keypress. –

+0

Świetne! Używam keydown dla klawiszy strzałek kursora, ale keyup dla wszystkiego innego! –

2

Powinieneś użyć keydown i zdarzeń keyup zamiast keypress.

Więc tutaj jest rozwiązanie:

window.keypressed = {}; 
$('#element').keydown(function(e){ 
    if (window.keypressed[e.which]) { 
    e.preventDefault(); 
    } else { 
    window.keypressed[e.which] = true; 
}).keyup(function(e){ 
    window.keypressed[e.which] = false; 
}); 
+0

@ user1267070 sprawdź ten kod ... zapobiegnie to wydrukowaniu każdego klucza więcej niż raz w polu tekstowym. –

+1

Dobra robota, prosta i czysta. Użyłem var charCode = (typeof e.which === "number")? e. który: e.keyCode; następnie użył charCode zamiast e.which. – DeadlyChambers

+0

Dobra robota @DeadlyChambers, ale kiedy używasz jQuery 'e.which' jest już przetworzony kod klawiatury (w sposób między przeglądarkami) –

Powiązane problemy