2009-09-10 14 views
27

Sposób zatrzymania zdarzenia keypress w kluczu keydown.Zdarzenie zatrzymania naciśnięcia klawisza

Mam keydown handler, że muszę zatrzymać wydarzenie keypress.

W rzeczywistości mam formularz i pole tekstowe w nim.

kiedy użytkownik naciśnie klawisz "Enter", keydown uruchomi wydarzenie i będzie posiadał przewodnik.

Przesłanie formularza zostanie wywołane naciśnięciem klawisza, więc muszę zatrzymać zdarzenie naciśnięcia klawisza w mojej kontrolce klucza keynomen.

Odpowiedz

33
function onKeyDown(event) { 
    event.preventDefault(); 
} 

http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event-preventDefault

lub

function onsubmit(event) { 
    return false; 
} 

return false zatrzymać propagacji WYDARZENIA

+1

event.preventDefault(); nie działa w operze – Santhosh

+0

var suppressEvent = false; funkcja onKeyDown (zdarzenie) { suppressEvent = true; event.preventDefault(); } funkcja onKeyPress (zdarzenie) { if (suppressEvent) event.preventDefault(); } – andho

+0

Bardzo dziękuję @john. Pomogło mi to w rozwiązaniu problemu, w którym moja niestandardowa procedura obsługi zdarzeń spowodowała, że ​​klawisz Enter przechodził do komórki poniżej w tabeli HTML _AND_ dodawał niepotrzebną dodatkową nową linię w tej nowej komórce. Właśnie musiałem anulować domyślne zdarzenie klawisza Enter. –

0

pisać,

<script type="text/javascript"> 
     function keyDn(obj) 
     { 
     if(window["event"]["keyCode"]==48) // key 0 will disabled keyPress event 
     { 
      obj["onkeypress"]=null; 
      } 
     } 
     function keyPs(obj) 
     { 
     alert("Keypress"); 
     } 

    </script> 

    <form id="form1" runat="server"> 
    <div> 
    <input type="text" onkeydown="keyDn(this)" onkeypress="keyPs(this)" /> 
    </div> 
    </form> 

w keydown obsługi.

1

Wypróbuj event.cancelBubble = true w procedurze obsługi zdarzeń.

0

Udało mi się uzyskać event.preventDefault(); do pracy w Safari i Firefox, ale nie w IE7 lub IE8.

Jeśli chcesz wyłączyć tylko klawisz Enter, upewnij się, że sprawdzasz także wartość klucza (13 dla Enter) i tylko ustawiasz event.preventDefault() dla tego klucza.

Ktoś jest w stanie wymyślić odpowiedź na IE7/8 lub Operę?

+0

Wiem, że to bardzo stary wątek, ale ponieważ twoje pytanie wciąż nie zostanie odebrane, zrobię to.W rzeczywistości znalazłem sposób obejścia problemu, który określiłeś: Powodujesz, że formularz zwraca false onsubmit i ukrywa i wyłącza przycisk przesyłania. Następnie utworzysz drugi przycisk (który nie jest typu przesłanego), który zostanie usunięty, usunie zwrotną fałszywą właściwość zdarzenia onsubmit i usunie wyłączenie przycisku. Następnie użyj tego przycisku, aby zasymulować zdarzenie kliknięcia na rzeczywistym przycisku przesyłania. Możesz znaleźć tutaj działający przykład: http://jsfiddle.net/rsauxil/qyf8L/6/. – JohannesB

3

W operze należy użyć zdarzenia keypress, aby zapobiec domyślnym działaniom związanym z wydarzeniami na klawiaturze. keydown działa, aby zapobiec domyślnym działaniom we wszystkich przeglądarkach, ale nie w operze.

Zobacz Obsługa klawiatury w różnych przeglądarkach na stronie this long list of inconsistencies.

0

Tu zatrzymał się na imprezę stacjonarnego/DN/lewy prawy klawiszy /:

$(document).on("keydown", function(e) { 
     if(e.keyCode >= 37 && e.keyCode <= 40) { 
      e.stopImmediatePropagation(); 
      return; 
     } 
    }); 

Próbowałem też e.preventDefault lub event.cancelBubble = true z powyższych odpowiedzi, ale nie miał wpływu.

Powiązane problemy