2009-09-10 10 views
27

Come interrompere l'evento keypress in keydown.Stop keypress event

Ho un gestore di keydown in cui ho bisogno di interrompere l'evento keypress.

In realtà ho un modulo e una casella di testo.

whn utente premere il tasto "invio", keydown i trigger l'evento e avere il gestore.

il modulo submit verrà attivato in keypress, quindi ho bisogno di interrompere l'evento keypress nel mio gestore di keydown.

risposta

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

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

o

function onsubmit(event) { 
    return false; 
} 

return false per fermare gli eventi di propagazione

+1

event.preventDefault(); non funziona in Opera – Santhosh

+0

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

+0

Grazie mille @john. Questo mi ha aiutato con un problema che stavo riscontrando dove il mio gestore di eventi personalizzato ha causato il passaggio della chiave di invio nella cella sottostante in una tabella HTML _AND_ aggiungeva una nuova riga extra non necessaria in quella nuova cella. Ho solo bisogno di cancellare l'evento di default del tasto invio. –

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> 

nel gestore keydown.

1

Provare event.cancelBubble = true nel gestore eventi.

0

Sono stato in grado di ottenere l'event.preventDefault(); lavorare su Safari e Firefox, ma non su IE7 o IE8.

Se si desidera disabilitare solo la chiave di invio, assicurarsi di verificare anche il valore della chiave (13 per Invio) e solo l'impostazione di event.preventDefault() per quella chiave.

Chiunque è in grado di fornire una risposta per IE7/8 o Opera?

+0

So che questo è un thread molto vecchio, ma poiché la tua domanda non ha ancora risposta, lo farò.In effetti, recentemente ho trovato una soluzione alternativa per il problema specificato: Il modulo restituisce false onsubmit e nasconde e disabilita il pulsante di invio. Quindi si crea un secondo pulsante (che non è del tipo submit) che infatti rimuoverà la proprietà false return dell'evento onsubmit e rimuoverà anche la disabilitazione del pulsante. Successivamente, si utilizza questo pulsante per simulare l'evento click sul pulsante di invio reale. È possibile trovare un esempio operativo qui: http://jsfiddle.net/rsauxil/qyf8L/6/. – JohannesB

3

In opera, è necessario utilizzare l'evento keypress per impedire le azioni predefinite per gli eventi della tastiera. keydown funziona per impedire l'azione predefinita in tutti i browser ma non in opera.

Vedere this long list of inconsistencies nella gestione della tastiera tra i vari browser.

0

Here I fermato il bubbling degli eventi per un massimo/dn/destra/sinistra:

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

Ho anche provato e.preventDefault o event.cancelBubble = true dalle risposte di cui sopra, ma non ha avuto alcun impatto