2009-09-10 16 views
27

Wie Keypress-Ereignis in Keydown zu stoppen.Stop keypress event

Ich habe einen Keydown-Handler, in dem ich das Tastendruckereignis stoppen muss.

Eigentlich habe ich ein Formular und eine Textbox darin.

Wenn Benutzer "Enter" -Taste drücken, Keydown ich trigger das Ereignis und den Handler.

Formular senden wird in Tastendruck ausgelöst, so dass ich das keypress-Ereignis in meinem Keydown-Handler stoppen muss.

Antwort

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

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

oder

function onsubmit(event) { 
    return false; 
} 

return false Ereignisse Ausbreitungs

+1

event.preventDefault(); funktioniert nicht in der Oper – Santhosh

+0

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

+0

Vielen Dank @John. Dies half mir bei einem Problem, das ich hatte, wo mein benutzerdefinierter Ereignishandler den Enter-Schlüssel veranlasste, sich in die Zelle darunter in einer HTML-Tabelle zu bewegen. _AND_ fügte eine unnötige zusätzliche neue Zeile in dieser neuen Zelle hinzu. Ich musste nur das Standard-Ereignis der Eingabetaste abbrechen. –

0

Write,

<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> 

in keydown Handler zu stoppen.

1

Versuchen Sie event.cancelBubble = true in Ereignishandler.

0

Ich konnte die event.preventDefault(); um in Safari und Firefox zu arbeiten, aber nicht IE7 oder IE8.

Wenn Sie nur die Eingabetaste deaktivieren möchten, vergewissern Sie sich, dass Sie auch nach dem Schlüsselwert (13 für Enter) suchen und nur event.preventDefault() für diesen Schlüssel festlegen.

Jeder in der Lage, eine Antwort für IE7/8 oder Opera zu finden?

+0

Ich weiß, das ist ein sehr alter Thread, aber da deine Frage immer noch nicht beantwortet wird, werde ich.In der Tat habe ich kürzlich eine funktionierende Problemumgehung für das Problem gefunden, das Sie angegeben haben: Sie machen Ihr Formular zurückgeben false onsubmit und ausblenden und deaktivieren Sie Ihre Absenden-Schaltfläche. Dann erstellen Sie eine zweite Schaltfläche (die nicht vom Typ submit ist), die infact die Eigenschaft return false des onsubmit-Ereignisses entfernt und auch die Deaktivierung der Schaltfläche entfernt. Danach verwenden Sie diese Schaltfläche, um das Klickereignis auf der Schaltfläche zum eigentlichen Senden zu simulieren. Sie können ein funktionierendes Beispiel hier finden: http://jsfiddle.net/rsauxil/qyf8L/6/. – JohannesB

3

In Opera müssen Sie das Ereignis keypress verwenden, um die Standardaktionen für Tastaturereignisse zu verhindern. keydown funktioniert, um Standardaktionen in allen Browsern zu verhindern, aber nicht in der Oper.

Siehe this long list of inconsistencies bei der Tastaturbedienung in verschiedenen Browsern.

0

Hier hielt ich das Ereignis sprudelnden für Auf-/dn/links/rechts Tasten:

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

Ich habe auch versucht e.preventDefault oder event.cancelBubble = true aus den Antworten oben, aber sie hatte keine Auswirkungen.