diff --git a/src/event.js b/src/event.js index 307907aa0..e2bac6f9b 100644 --- a/src/event.js +++ b/src/event.js @@ -616,8 +616,9 @@ jQuery.event = { beforeunload: { postDispatch: function( event ) { - // Even when returnValue equals to undefined Firefox will still show alert - if ( event.result !== undefined ) { + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { event.originalEvent.returnValue = event.result; } } diff --git a/test/data/event/triggerunload.html b/test/data/event/triggerunload.html new file mode 100644 index 000000000..a7879c772 --- /dev/null +++ b/test/data/event/triggerunload.html @@ -0,0 +1,18 @@ + + + + + diff --git a/test/unit/event.js b/test/unit/event.js index 2a9cd22f3..0cd181252 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -2522,6 +2522,11 @@ testIframeWithCallback( "Focusing iframe element", "event/focusElem.html", funct ok( isOk, "Focused an element in an iframe" ); }); +testIframeWithCallback( "triggerHandler(onbeforeunload)", "event/triggerunload.html", function( isOk ) { + expect( 1 ); + ok( isOk, "Triggered onbeforeunload without an error" ); +}); + // need PHP here to make the incepted IFRAME hang if ( hasPHP ) { testIframeWithCallback( "jQuery.ready synchronous load with long loading subresources", "event/syncReady.html", function( isOk ) {