2013-05-01 5 views
33

Der folgende Code führt eine Warnung aus, wenn Sie Daten auf der Seite ändern und dann die Seite verlassen. Ich will das - außer wenn der Benutzer die Speichern-Taste drückt. Diesejquery warnen, wenn die Seite verlassen wird, ohne auf die Schaltfläche zum Speichern zu klicken

ist die jQuery-Code:

$(document).ready(function() { 
    formmodified=0; 
    $('form *').change(function(){ 
     formmodified=1; 
    }); 
    window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     if (formmodified == 1) { 
      return "New information not saved. Do you wish to leave the page?"; 
     } 
    } 
}); 

Dies ist der Knopf, der die Daten gespeichert werden:

<input class="btn-primary" name="commit" type="submit" value="Save Material"> 

UPDATE Dank tymeJV !!!!!!!

Falls jemand braucht es anders, das funktioniert:

$(document).ready(function() { 
    formmodified=0; 
    $('form *').change(function(){ 
     formmodified=1; 
    }); 
    window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     if (formmodified == 1) { 
      return "New information not saved. Do you wish to leave the page?"; 
     } 
    } 
    $("input[name='commit']").click(function() { 
     formmodified = 0; 
    }); 
}); 
+2

Ist ‚formmodified‘ nur für die Dauer der Seite verwendet? Und nicht weitergegeben? Wenn ja, dann setze es einfach auf 0, wenn du auf die Schaltfläche Speichern klickst oder das Formular abschickst. – MasNotsram

+0

Nicht sicher, dass ich verstehe, möchten Sie eine Warnung, dass Informationen nicht gespeichert werden, wenn Sie auf die Schaltfläche Speichern klicken? –

+0

@ColinBacon Ich glaube, er will es so, dass, wenn er auf die Schaltfläche Speichern klickt, nicht die Warnung am Ende zum Speichern anzeigen. – tymeJV

Antwort

19

Angesichts Ihrer info speichern Taste:

<input class="btn-primary" name="commit" type="submit" value="Save Material"> 

Sie den Wert von formmodified

$("input[name='commit']").click(function() { 
    formmodified = 0; 
}); 

Ihr Scheck einstellen am Ende sollte jetzt nicht ausgelöst werden

+0

Danke für die Hilfe! – Reddirt

+0

Funktioniert wie ein Charme. Und wir brauchen eigentlich nicht die letzte Zeile "Bist du sicher, dass du die Seite verlassen willst?" Dies scheint ein integraler Bestandteil der Bestätigungsaufforderung des Browsers (zumindest Chrome) zu sein. – cbmtrx

+0

Hmm, vielleicht habe ich zu früh gesprochen, @tymeJV. Es scheint, dass - zumindest in Chrome - die 'window.onbeforeunload' die Funktion' confirmExit() 'aufruft, bevor der Klick der' input.commit'-Schaltfläche registriert wird. So macht es sogar bei der Formularübergabe Alarm. – cbmtrx

6
$('#form').data('serialize',$('#form').serialize()); // On load save form current state 

$(window).bind('beforeunload', function(e){ 
    if($('#form').serialize()!=$('#form').data('serialize'))return true; 
    else e=null; // i.e; if form state change show box not. 
}); 

Sie können Google JQuery Formular Serialize-Funktion, diese sammelt alle Formulareingaben und speichert sie im Array. Ich denke, diese Erklärung ist genug :)

+0

Einige Erklärung zu der Lösung würde helfen und plus Sie können mehr davon verdienen. – suspectus

+0

ok, danke für deinen Vorschlag, ich tat es. –

3

Dies ist keine exakte Antwort auf die obige Frage, sondern als Referenz für diejenigen, die nach einer Lösung für das Problem suchen 'benachrichtigen Benutzer über nicht gespeicherte Formularänderungen' wie ich war, ich ' Ich empfehle das jQuery-Plugin AreYouSure. Dieses sehr leichte Plug-in verarbeitet alle nuts und fett wie rückgängig gemachten Formularänderungen, klicken Sie auf die Form Reset-Taste, Hinzufügen/Entfernen von Formularfelder usw. ohne weitere Fiedeln.

0

Wenn Sie die Seite verlassen verhindern soll, wenn ein Link geklickt wird, können Sie zum beforeunload Ereignis binden kann und passieren e in:

$(document).ready(function() { 
    var modified = false; 
    $(window).bind('beforeunload', function(e){ 
     if (modified) { 
      $.confirm({ 
       'title' : 'Did You Save Your Changes?', 
       'message' : 'It seems as if you have made changes but didn\'t click Save.\nAre you sure you want to leave the page?', 
       'buttons' : { 
        'OK' : { 
         'class' : 'gray', 
         'action': function(){} // Nothing to do in this case. This can be omitted if you prefer. 
        } 
       }) 
      } 
      e.preventDefault(); 
     } 
    }); 
});  
+0

Doest nicht für mich arbeiten: Klicken Sie auf einen Link oder drücken Sie im Browser neu laden, nur öffnen/neu laden Sie die Seite. – Fabien

+1

Von https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload: "Seit dem 25. Mai 2011 gibt die HTML5-Spezifikation an, dass Aufrufe von window.alert(), window.confirm (), und window.prompt() - Methoden können während dieses Ereignisses ignoriert werden. Weitere Informationen finden Sie in der HTML5-Spezifikation. " – dieend

Verwandte Themen