2015-02-20 5 views
8

Ich möchte eine Funktion ausführen, bevor Sie die Seite verlassen, ohne ein Bestätigungsdialogfeld mit Javascript nur Javascript zu zeigen. Ich habe versucht, mit dem Code unten, aber es hat nicht funktioniert oder mit der onbeforeunload, aber es zeigt immer das Popup.So rufen Sie eine Funktion vor dem Verlassen der Seite mit Javascript

var result = 'test'; 

if(window.onbeforeunload == true) 
{ 
    result = 'test1'; 
    alertmess(); 
} 

function alertmess() { 
    alert(result); 
} 

//window.onbeforeunload = function() { 
// return result; 
//} 
+1

Die kurze Antwort ist, dass Sie dies nicht tun können. Das 'onbeforeunload'-Ereignis kann * nur * verwendet werden, um das Popup auszulösen, es kann nicht für irgendetwas anderes verwendet werden. Ihre einzigen Optionen für etwas wie das sind, ein Ereignis an jeden ausgehenden Link auf Ihrer Seite anzuhängen. Es gibt jedoch keine Möglichkeit, ein Ereignis direkt für jemanden zu erfassen, der auf andere Weise verlässt (manuell eingeben einer URL, Schließen des Tabs usw.). –

+0

check this out http://stackoverflow.com/questions/17975068/calling-js-functions-on-browser-tab-close –

+0

Ich bin auf der Suche nach einem Weg, dass es keine Funktion auslösen kann, wenn ein Benutzer auf dem Weg zu eine neue Seite laden oder die aktuelle Seite verlassen. –

Antwort

22

Sie können jederzeit Ihre Funktion aufrufen, bevor Sie die Seite verlassen.

function myfun(){ 
    // Write your business logic here 
    console.log('hello'); 
} 

onbeforeunload:

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

Oder mit jQuery:

$(window).bind('beforeunload', function(){ 
    myfun(); 
    return 'Are you sure you want to leave?'; 
}); 

Dies wird nur den Benutzer fragen, ob sie die Seite oder nicht verlassen wollen, können Sie sie nicht umleiten, wenn sie wählen auf der Seite bleiben. Wenn sie sich entscheiden zu gehen, wird der Browser dorthin gehen, wo sie ihm gesagt haben.

Sie onunload verwenden können, Dinge zu tun, bevor die Seite geladen ist, aber man kann von dort aus (Chrome 14+ Blöcke Warnungen innerhalb onunload) nicht umleiten:

window.onunload = function() { 
    myfun(); 
    alert('Bye.'); 
} 

Oder mit jQuery:

$(window).unload(function(){ 
    myfun(); 
    alert('Bye.'); 
}); 
+1

Sehr gute Erklärung! –

+1

Das ist großartig. Danke für deinen Code. Es funktionierte mit der Funktion 'myfun()'. Gibt es eine Möglichkeit, das Bestätigungs-Popup zu deaktivieren oder stattdessen 'alert()' zu verwenden? –

+1

Ok, in diesem Fall schreibe Alarm (''); in der myfun am Ende, das würde Ihnen einen Fehler in js "NS_ERROR_NOT_AVAILABLE:" und Bestätigung Popup wird nicht kommen, obwohl es falsch ist, es zu tun, aber wird es auch tun ;-) –

0

Was Sie dort tun, wird es definitiv nicht tun. Ein Vergleich von window.onbeforeunload zu true zu einem beliebigen Zeitpunkt ist nicht einmal sinnvoll.

Was ist mit dem auskommentierten Code am Ende? Wenn überhaupt, müssen Sie eine Funktion onbeforeunload zuzuweisen:

var result = 'test'; 

window.onbeforeunload = function() { 
    result = 'test1'; 
    alertmess(); 
} 

function alertmess() { 
    alert(result); 
} 

jedoch nur die oben erscheint im Internet Explorer zu arbeiten. Bitte beachten Sie den @ Bulk-Kommentar und @Brandon Ganos Antwort.

+1

Ich habe mit dir Code mit FF und Chrome auch ausprobiert. Es ist jedoch nichts passiert. –

+2

@ PMay1903 Ja, das ist, warum ich sagte „jedoch nur die oben erscheint im Internet Explorer zu arbeiten.“ – JLRishe

0

Wenn Sie den Benutzer auffordern möchten, geben Sie eine Zeichenfolge mit der Nachricht zurück. Wenn Sie den Benutzer nicht zur Eingabe auffordern möchten, geben Sie nichts zurück.

// Execute code, then prompt the user to stay 
window.onbeforeunload = function() { 
    // This will happen before leaving the page 
    return 'Are you sure you want to leave?'; 
} 

Oder:

// Execute code, then leave 
window.onbeforeunload = function() { 
    // This will happen before leaving the page 
} 
+0

'window.onbeforeunload = function() { \t \t alert (result); \t // Diese Seite \t Rückkehr vor dem Verlassen falsch passieren wird; \t} 'Ich habe versucht mit alert() vor' return false; 'als mein Denken, aber es funktioniert nicht. –

+0

Browser erlauben nicht die Verwendung von "alert" in diesem Handler. Die einzige Möglichkeit, eine Nachricht anzuzeigen, besteht darin, sie als Zeichenfolge zurückzugeben, die dem Benutzer die Möglichkeit gibt, zu bleiben oder zu gehen. –

+0

Das heißt, ich habe eine Änderung an meiner Antwort vorgenommen, da das 'return false' auch den Benutzer auffordert. –

-1

Dies ist ein Beispiel dafür, wie man die navigate weg umgehen konnte. Beachten Sie, wie ein Div ein wenig vor der Navigation erscheint.

window.onbeforeunload = function() 
 
{ 
 
    $("#oi").append($('<div>This is the child DIV</div>')); 
 
    
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="theMainDiv"> 
 
    The Main Div will receive another div before leaving the page 
 
</div> 
 

 
<button onclick="window.location.href='pageAway'">Navigate Away</button>

+0

Der Code ist im HTML-Abschnitt. Versuchen Sie es im JS-Abschnitt zu testen. – ClayKaboom

1

Rufen Sie einfach Ihre Funktion aus window.onbeforeunload. Beachten Sie, dass einige Browser einschränken, was Sie hier tun können (zB: keine Weiterleitungen oder Warnungen). Siehe: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload für weitere Informationen.

Ich habe auch den entsprechenden Code für Leser hinzugefügt, die tun möchten, um einen Bestätigungsdialog anzuzeigen.

function doSomething(){ 
    //do some stuff here. eg: 
    document.getElementById("test").innerHTML="Goodbye!"; 
} 
function showADialog(e){ 
    var confirmationMessage = 'Your message here'; 
    //some of the older browsers require you to set the return value of the event 
    (e || window.event).returnValue = confirmationMessage;  // Gecko and Trident 
    return confirmationMessage;        // Gecko and WebKit 
} 
window.addEventListener("beforeunload", function (e) { 
    //To do something (Remember, redirects or alerts are blocked here by most browsers): 
    doSomething();  
    //To show a dialog (uncomment to test): 
    //return showADialog(e); 
}); 

Drücken Sie einfach auf ‚Ausführen‘ zu testen: http://jsfiddle.net/2Lv4pa9p/1/

+0

@ downvoter - Feedback könnte nützlich sein, ta;) – Moob

+0

Vielen Dank dafür. Es funktioniert wie Ihre Probe. Es funktioniert jedoch nicht so wie ich es mir wünsche. 1+ damit. –

0

Die Dokumentation hier regt zum onbeforeunload Ereignisse zu hören und/oder das Hinzufügen eines Ereignis-Listener auf Fenster.

window.addEventListener('onbeforeunload', function(e) {}, false); 

Sie können auch füllen Sie einfach die .onunload oder .onbeforeunload Eigenschaften von window mit einer Funktion oder Funktionsreferenz.

Obwohl Verhalten in allen Browsern nicht standardisiert ist, kann die Funktion einen Wert zurückgeben, dass der Browser angezeigt wird, wenn bestätigt wird, ob die Seite zu verlassen.

0

Bitte versuchen Sie unten einfache Code -

JQuery-Code Beispiel -

$(window).bind('beforeunload', function(){ 
    Func_ToInsert_Record(); 
    Alert('Thanks And Bye!'); 
}); 

Javascript-Code Beispiel -

// Anonymous function 
window.onbeforeunload = function(event) { 
    var message = ''; 
    if (window.event) { 
    console.log(window.event); 
    console.log(event.currentTarget.performance); 
    console.log(event.currentTarget.performance.navigation); 
    console.log(event.currentTarget.performance.navigation.type); 

    } 

    event = event || window.event; 
    event.preventDefault = true; 
    event.cancelBubble = true; 
    event.returnValue = message; 
} 
0

ich einfach put diesen Code und arbeitet preety gut

window.onbeforeunload = function(event) { 
    $('element').show(); 
    return; 
}; 
Verwandte Themen