재미있는 문제를 (내가 오디오를 재생하는 키보드 단축키로 [ESC] 키를 사용하고 있기 때문에 중요하다) -이 크롬을 예를 들어 IE에서 발생하지만. 다음은 Chrome과 IE에서 테스트 한 솔루션입니다 (제대로 작동하는 것 같습니다).
확장 된 버전 :
스크립트 페이지 머리글 :
'testinput은'우리가 탈출하지 않도록 설정하는 입력
<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>
. testinput의 HTML은 다음과 같습니다 :
<input id="testinput" onkeypress="CheckPreBuff();" onkeyup="CheckPreBuff();" type="text"/>
공지 사항 'onKeyUp에'와 '때 onKeyPress'모두가 사용되었다 - 기술적으로 만 필요한 사용하더라도한다 'onKeyUp에'가 '때 onKeyPress'이스케이프 키는 동안 잠시 비워가는 텍스트 상자를 방지 우울. (원하는 경우) 지원
수동으로 축소 된 + 오류 방지 + 다중 입력 헤더
스크립트 :
<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>
testinput HTML 태그 (의 ID가 더 이상 필요하지 않지만) :
<input onfocus="InitCPB(this);" type="text"/>
두 가지 방법 모두 다음 키를 누르기 전에 텍스트 입력 내용을 그대로 유지합니다. d가 '이스케이프', 유니 코드 27이면 이전 텍스트 항목이 텍스트 상자에 다시 입력됩니다 (차별성이므로 모든 키를 누를 때마다 브라우저에 너무 많은 부하가 가해지지 않습니다).
두 번째 버전에서는 이스케이프 키가 비활성화 된 동일한 페이지에서 여러 텍스트 입력을 허용합니다. 위와 같이 onFocus 속성이 설정되어 있으면 (여러 요소가 서로 간섭하지 않을 경우) 이스케이프 키가 비활성화됩니다. IE가 심장 발작을 일으키는 우발적 인 잘못된 구현을 방지하기 위해 전달되는 객체가 정의되었는지 검사합니다!
이 정보가 도움이되기를 바랍니다.
다른 곳에서도 문제가있는 것 같습니다. esc를 취소해도 도움이되지 않습니다. – Mrchief
참고 : Firefox 5에서이 문제가 발생했습니다. – philfreo
[이 답변보기] (http://stackoverflow.com/a/10275286/2131505). 기본 동작을 방지하는 keydown 처리기를 추가하면이 문제가 더 잘 해결됩니다. – Chen