2012-09-19 4 views
2

텍스트 필드에 ID = "Text1", 함수를 발생시키는 Text1 필드가 포커스를 잃을 때 "validateField()"가 표시됩니다. 또한 Enter 키가 눌려 졌는지 확인합니다 "onKeyDown에")JavaScript가 창을 닫을 때 함수가 실행되지 못하도록 함

예 :

<input type=text ID="Text1" onkeydown="wasEnterKey(); " onblur="validateField()" > 

문제는 그 사용자가 윈도우,이 이벤트가 발생을 닫고 나가 일어나는 것을 방지하고 싶을 때.

나는 validatField 기능에 window.onbeforeunload 및 window.onunload를 사용하는 것을 시도했다 :

function validateField() 
{ 
if (window.onbeforeunload) { 
    window.open('','_parent','');window.close(); return false; 
          } 
... (other actions follow) 
} 

어떤 도움을 크게 감상 할 수있다.

+0

'window.onbeforeunload'는 이벤트 처리기입니다. 페이지를 언로드하기 직전에 실행하려는 함수에 할당합니다. 당신이 할 수 있다고 생각하는 것처럼 언로 드하고있는 중이라는 것을 확인할 수는 없습니다. – lanzz

+0

이벤트 발생을 피하려면 try window.onbeforeunload = null –

+2

한 가지 방법은 setTimeout을 사용하여 나중에 콜백을 exec 할 수 있기 때문에 창을 닫으면 실행되지 않습니다. 슈퍼 깨끗한 없습니다. 더 좋은 방법이 있는지 궁금합니다. – 3on

답변

1

감사 : @ 3on 및 @Champ!

내가 실제로 해결 한 해결책은 실제 코드가 다른 사람에게 도움이 될 수 있다고 생각하는 것입니다. 다시 한 번 감사드립니다!

<SCRIPT LANGUAGE="JavaScript"> 
function delayBlur() 
{ setTimeout(validatePwd, 100); } 

function closenow() 
    { window.open('','_parent','');window.close(); return false; } 

function validateField() 
{ 
    var field1 = document.myForm.Text1.value; 
    if (Text1 == '') 
    {... (other actions follow)} 
} 
</SCRIPT> 
<input type=Text ID="Text1" onkeydown="wasEnterKey(); " onblur="delayBlur()"> 

은 사용자가 모두 3on와 챔프가 제안, 닫기 버튼을 클릭하면 종료 창을 수 있습니다. 또한 Enter 키가 양식을 제출하지 못하게합니다. 나는 엔터 키를 감지하고 키 코드를 탭 키로 대체합니다. 나는 타임 아웃을 100보다 낮게 설정하고 산발적 인 문제를 가지고 실험했는데 100은 결코 실패하지 않았다!

관련 문제