복붙노트

[JQUERY] 사용자가 자바 스크립트가 대화를 onbeforeunload에서 취소를 클릭하면 방법은 알고?

JQUERY

사용자가 자바 스크립트가 대화를 onbeforeunload에서 취소를 클릭하면 방법은 알고?

해결법


  1. 1.당신은 이런 식으로 작업을 수행 할 수 있습니다 :

    당신은 이런 식으로 작업을 수행 할 수 있습니다 :

    $(function() {
        $(window).bind('beforeunload', function() {
            setTimeout(function() {
                setTimeout(function() {
                    $(document.body).css('background-color', 'red');
                }, 1000);
            },1);
            return 'are you sure';
        });
    }); 
    

    첫 번째 방법에서는 setTimeout 내의 코드 1ms의 지연을 갖는다. 이것은 단지 UI 큐에 기능을 추가하는 것입니다. 에서는 setTimeout이 실행되므로 비동기 자바 스크립트 인터프리터는 직접 차례로 브라우저 모달 대화 상자를 트리거 return 문을 호출하여 나갈 것입니다. 모달가 닫힐 때까지의 UI 큐 및 제의 setTimeout에서 코드가 실행되지 않고 차단된다. 사용자가 취소를 누를 경우, 약 1 초에 서로의 setTimeout 불을 트리거합니다. 사용자가 확인으로 확인 된 경우, 사용자는 리디렉션되고 두 번째에서는 setTimeout 해고되지 않습니다.

    예 : http://www.jsfiddle.net/NdyGJ/2/


  2. 2.나는이 질문은 지금 오래 알고 있지만, 경우에 여전히에 문제가있는 누군가가, 내가 나를 위해 작동하는 것 같다 해결책을 발견,

    나는이 질문은 지금 오래 알고 있지만, 경우에 여전히에 문제가있는 누군가가, 내가 나를 위해 작동하는 것 같다 해결책을 발견,

    기본적으로 언로드 이벤트는 beforeunload 이벤트 후에 발생합니다. 우리는 jAndy의 답변을 개질 beforeunload 이벤트에서 생성 된 시간 제한을 취소하려면이 옵션을 사용할 수 있습니다 :

    $(function() {
        var beforeUnloadTimeout = 0 ;
        $(window).bind('beforeunload', function()  {
            console.log('beforeunload');
            beforeUnloadTimeout = setTimeout(function() {
                console.log('settimeout function');
                $(document.body).css('background-color', 'red');
            },500);
            return 'are you sure';
        });
        $(window).bind('unload', function() {
            console.log('unload');
            if(typeof beforeUnloadTimeout !=='undefined' && beforeUnloadTimeout != 0)
                clearTimeout(beforeUnloadTimeout);
        });
    }); 
    

    편집 : 여기 jsfiddle


  3. 3.가능하지 않습니다. 아마도 누군가가 어떤 코드를 실행할 않아 ... 잘못 나를 증명할 것인가? 당신이 원하는 마십시오 자동 저장가 취소를 클릭하면? 그 소리는 반 직관적. 당신이 이미하지 않으면 내가 자동 저장 그들이 명중 할 때 "취소"를 거의 의미가 생각, 자동 - 저장합니다. 사용자들은 멀리 이동하기 전에해야 할 일을 볼 수 있도록 어쩌면 당신은 당신입니다 onbeforeunload 처리기에서 저장 버튼을 강조 할 수있다.

    가능하지 않습니다. 아마도 누군가가 어떤 코드를 실행할 않아 ... 잘못 나를 증명할 것인가? 당신이 원하는 마십시오 자동 저장가 취소를 클릭하면? 그 소리는 반 직관적. 당신이 이미하지 않으면 내가 자동 저장 그들이 명중 할 때 "취소"를 거의 의미가 생각, 자동 - 저장합니다. 사용자들은 멀리 이동하기 전에해야 할 일을 볼 수 있도록 어쩌면 당신은 당신입니다 onbeforeunload 처리기에서 저장 버튼을 강조 할 수있다.


  4. 4.나는 그것이 가능했다 생각하지만, 바로이 아이디어를 시도하고 (무엇 해킹의 일부이며 모든 브라우저에서 동일하게 작동하지 않을 수 있지만) 그것은 작동하지 않았다 :

    나는 그것이 가능했다 생각하지만, 바로이 아이디어를 시도하고 (무엇 해킹의 일부이며 모든 브라우저에서 동일하게 작동하지 않을 수 있지만) 그것은 작동하지 않았다 :

    window.onbeforeunload = function () {   
      $('body').mousemove(checkunload);
      return "Sure thing"; 
    };
    
    function checkunload() {   
      $('body').unbind("mousemove");
      //ADD CODE TO RUN IF CANCEL WAS CLICKED
    }
    

  5. 5.

    window.onbeforeunload  = function() {
        if (confirm('Do you want to navigate away from this page?')) {
            alert('Saving work...(OK clicked)')
        } else {
            alert('Saving work...(canceled clicked)')
            return false
        }
     }
    

    이 코드 또한 IE8에서 '취소'에 사용자가 클릭은 기본 탐색 대화 상자가 표시됩니다.

  6. from https://stackoverflow.com/questions/4650692/way-to-know-if-user-clicked-cancel-on-a-javascript-onbeforeunload-dialog by cc-by-sa and MIT license