2011-09-20 5 views
7

jQuery (1.6.x)에 이상한 문제가 있습니다. 내 페이지에 간단한 전화가 :jQuery가 때때로 window.onbeforeunload를 덮어 쓰는 이유는 무엇입니까?

window.onbeforeunload = function() { return 'Are you sure ?'; }; 

을하지만 내가 발견 한대로, jQuery를이 window.onbeforeunload의 내용을 덮어 쓰기 때문에 그것은 작동하지 않습니다.

function(e) { 
// Discard the second event of a jQuery.event.trigger() and 
// when an event is called after a page has unloaded 
return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? 
    jQuery.event.handle.apply(eventHandle.elem, arguments) : undefined; 
}; 

이유는 어디에 jQuery를 내입니다 onbeforeunload 기능을 덮어 내가 찾을 수있는 방법이 있나요 : JS 콘솔에서, 나는 window.onbeforeunload는 jQuery 코드의 조각을 포함 볼 수 있습니까? jQuery를로드하고 onbeforeunload 함수를 사용하여 빈 jsfiddle을 실행하려고하면 예상대로 작동합니다.

힌트를 보내 주시면 감사하겠습니다. 미리 감사드립니다.

는 편집 :

이런 경우에, 누군가가 사용 제안 :

$(window).bind('beforeunload', function() { return 'Are you sure';}); 

나는 이미 그것을 시도하고 순수한 자바 스크립트를 사용하여 같은 방식으로 동작합니다.

+0

대신 jQuery'unload' 메서드를 사용할 수 있습니까? http://api.jquery.com/unload/ –

+0

'onbeforeunload'에 내 자신의 함수를 성공적으로 적용 할 수 있으며 jQuery 1.6을 사용합니다. 제공 할 수있는 정보 나 코드가 더 있습니까? 이것이 모든 브라우저에서 작동하지 않습니까? http://jsfiddle.net/Kai/QgVE8/ – Kai

+0

우주에서 비명을 지르고 있습니다. 이 문제를 재현하는 테스트 케이스를 제공하면 도움이됩니다. – mekwall

답변

4

좋아, 나는 문제의 정확한 원인을 알지 못하기 때문에 결국 가장 깨끗한 솔루션이 아닌 해결책을 찾았습니다.하지만 작동합니다. beforeunload 함수를 jQuery의로드 함수에 넣었으므로 DOM과 다른 요소가로드 된 후에 실행됩니다.

$(window).load(function() { 
    $(window).bind('beforeunload', function() { return 'Are you sure ?';}); 
}); 
+0

이 $ (창) .bind ('beforeunload', function() {return 'Are you sure?';}); 그냥 나를 위해 잘 일한 감사합니다. –

0

setTimeout(function(){ ... },0)을 사용해 보았을 때 같은 문제가 발생했기 때문에 가능한 해결책이되었습니다.

관련 문제