2012-03-26 6 views

Antwort

1

Ich vermute, da Sie an die onbeforeunload zu binden sind versucht und einen String zurückgeben, dass Sie suchen den Benutzer mit einem zu schaffen, "Sind Sie sicher, dass Sie diese Seite verlassen möchten" -Dialog auf einer AJAX-Site.

In diesem Fall müssen Sie wahrscheinlich etwas anders vorgehen, indem Sie einen Click-Handler an die Links binden. So können Sie die Änderung des Hashs verhindern, bis die Bestätigung erfolgt.

Etwas wie:

$('a[href^="#"]').live('click',function(e){ 
    if(//should we be confirming first?) { 
     //put your confirmation code here either using default JS windows or your own CSS/jQueryUI dialog boxes 
     // this code should either cache the url of the link that was clicked and manually update the location with it when the user confirms the dialog box (if you're using JQUI windows) or simply use JS confirmation boxes and based on the response, all you need to do is return; and the link click will handle normally 
     e.preventDefault(); //prevent the link from changing the hash tag just yet 
     e.stopImmediatePropagation(); //prevent any parent elements from firing any events for this click 
    } 
}); 
+0

Ja, das funktioniert! Vielen Dank :) –

1

Versteh mich nicht falsch, aber meinst du es ernst?

Dieser Link bezieht sich nur auf ein Hash-Tag, daher wird die aktuelle Site nicht verlassen und es wird weder onbeforeunload noch unload aufgerufen.

Wenn es einen * Click Event Handler bound to that anchor aswell, there must be something in the event handler code which really forces the current site to get unloaded ( location.href` zum Beispiel gibt).

Wenn Sie nur HTML über Ajax wechseln, gibt es auch keine onbeforeunload.

Sie könnten einen Handler an das Ereignis onhashchange binden (Browserkompatibilität prüfen), aber das würde für jede Änderung ausgelöst, die in Ihrer URL/Hash geschieht.

+0

Ja, das weiß ich. Aber aus der Sicht des Benutzers hat er die Seite gewechselt. Die Frage ist also mehr: Wie kann ich das verhindern, als hätte ich es mit dem OnbeforeUnload-Trick verhindern können? –

+0

@MaximeARNSTAMM: sicherlich in diesem Fall müssen Sie nur finden, wo Sie die Ajax tun und bevor Sie es tun, setzen Sie die Bestätigungslogik ein? – Chris