Problema interesante - sucede en el IE, por ejemplo, pero no cromo. Aquí hay una solución que probé en Chrome e IE (parece funcionar).
versión ampliada:
script en el encabezado de la página:
<script>
var buff; //Must have global scope
var input = document.getElementById("testinput"); //Defined here to save cpu (instead of on every key press).
function CheckPreBuff(e)
{
var ev = window.event ? event : e; //Get the event object for IE or FF
var unicode = (typeof(ev.keyCode) != "undefined")? ev.keyCode : ev.charCode;
if(unicode != 27) buff = input.value; //The 'escape' key has a unicode value of 27
else input.value = buff; //Only set the input contents when needed, so not to waste cpu.
}
</script>
Dónde testinput 'es la entrada estamos deshabilitando al salir. El html testinput es el siguiente:
<input id="testinput" onkeypress="CheckPreBuff();" onkeyup="CheckPreBuff();" type="text"/>
Aviso tanto 'onkeyup' y 'onkeypress' se utilizaron - técnico solamente 'onkeyup' se necesita, aunque el uso de 'onkeypress' impide que el cuadro de texto que va en blanco momentáneamente mientras la tecla de escape es Deprimido.
entradas minified manualmente + prevención de errores + múltiples compatibles (si lo prefiere)
script en el encabezado:
<script>
var buff = [];
function InitCPB(obj){if(typeof(obj)=="undefined")return;buff[0]=obj;buff[1]="";obj.onkeypress=CPB;obj.onkeyup=CPB;}
function CPB(e){if(typeof((buff[0]))=="undefined")return;var ev=window.event?event:e;(((typeof(ev.keyCode)!="undefined")?ev.keyCode:ev.charCode)!=27)?buff[1]=(buff[0]).value:(buff[0]).value=buff[1];}
</script>
etiqueta testinput html (aunque un id ya no es necesario):
<input onfocus="InitCPB(this);" type="text"/>
Ambos métodos guardan una copia de lo que las entradas de texto contenían antes de pulsar la tecla siguiente, si la tecla presse d era 'escape', unicode 27, luego la entrada de texto anterior se volvió a poner en el cuadro de texto (esto es discriminatorio por lo que el script no agrega demasiada carga al navegador cada vez que se presiona una tecla).
La segunda versión permite que múltiples entradas de texto en la misma página tengan la clave de escape desactivada, siempre y cuando tengan el atributo onFocus configurado como se indicó anteriormente (los múltiples elementos no interferirán entre sí). También verifica que los objetos que se pasan a él estén definidos, para evitar una mala implementación accidental, ¡lo que provoca un ataque al corazón por parte de IE!
Espero que esto ayude.
Parece que el problema está en otra parte. Cancelar esc no puede ayudar. – Mrchief
Nota: Me di cuenta de este problema en Firefox 5 – philfreo
Ver [esta respuesta] (http://stackoverflow.com/a/10275286/2131505). Agregar un manejador de teclas que previene acciones predeterminadas resuelve este problema de una mejor manera. – Chen