2009-05-08 2 views
2

Ich muss die Benutzer etwas erinnern, wenn sie die Seite verlassen, und das kann mit dem window.onUnload -Ereignis behandelt werden. Aber ich muss auch überprüfen, ob der Benutzer weg navigiert, indem Sie das Formular auf der Seite senden oder indem Sie auf die Navigationslinks klicken. Ich könnte das onSubmit-Ereignis des Formulars verwenden, um ein Flag festzulegen, und dann im Fenster.onUnload-Ereignis nach diesem Flag suchen, aber ich bin mir nicht sicher, welches zuerst ausgelöst wird.Javascript: Überprüfen Sie, ob der Benutzer mit einem Formular reicht oder eine einfache Verknüpfung klicken Sie auf

irgendwelche Ideen?

+3

Warum machen Sie nicht einen Test und sehen, was zuerst feuert? – svinto

Antwort

5

Sie wollen eigentlich

window.onbeforeunload = function (e) { 
    var e = e || window.event; 

    // For IE and Firefox 
    if (e) { 
    e.returnValue = 'Are You Sure?'; 
    } 

    // For Safari 
    return 'Are You Sure?'; 
}; 
+0

Ich weiß, es ist ein wenig alt, aber [diese Quelle] (https://developer.mozilla.org/en/DOM/window.onbeforeunload) erklärt, dass diese Funktionalität vor Firefox 4 ist. – arin

0

Es stellt sich heraus, dass die window.onbeforeunload form.onSubmit Ereignis ausgelöst wird zuerst so dass ich ein Flag verwenden können. Ich habe das nur in Firefox und Safari überprüft.

+0

onsubmit wird nicht ausgelöst, wenn sie aktualisieren die Seite, klicken Sie zurück, geben Sie eine neue URL ein. Um Arbeitsverluste zu vermeiden, halten Sie sich vor dem Entladen auf. Übrigens, damit es richtig funktioniert, muss es wie von Chad Grant beschrieben erfolgen, nicht von addEventListener –

0
var isRefresh = true; 
window.onunload = function() { 
    alert('the page was ' + (isRefresh == false ? 'NOT ' : '') + 'refreshed'); 
} 
$('a').live('click', function() { isRefresh = false; alert('a link was clicked'); }); 
$('form').bind('submit', function() { isRefresh = false; alert('form was submitted'); }); 

auf How to capture the browser window close event? Basierend. Ich habe die Refresh-Logik hinzugefügt.

Verwandte Themen