2013-05-01 8 views
33

Il codice seguente esegue un avviso se si modificano i dati sulla pagina e si lascia la pagina. Lo voglio - tranne quando l'utente preme il pulsante Salva.jquery avvisa se si lascia la pagina senza fare clic sul pulsante di salvataggio

Questo è il codice jQuery:

$(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?"; 
     } 
    } 
}); 

Questo è il pulsante che salva i dati:

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

AGGIORNAMENTO Grazie tymeJV !!!!!!!

Nel caso in cui qualcun altro ne ha bisogno, questo funziona:

$(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

è 'formmodified' appena usato per tutta la durata della pagina? E non trasmesso? In tal caso, basta impostarlo su 0 onclick del pulsante Salva o su invio del modulo. – MasNotsram

+0

Non sono sicuro di aver capito, si desidera un avviso che le informazioni NON vengano salvate quando si fa clic sul pulsante Salva? –

+0

@ColinBacon Credo che voglia sia così che se fa clic sul pulsante Salva, non mostrare l'avviso alla fine del salvataggio. – tymeJV

risposta

19

Data la tua salvare le informazioni pulsante:

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

È possibile impostare il valore di formmodified

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

Il suo assegno alla fine non dovrebbe essere attivato ora

+0

Grazie per l'aiuto! – Reddirt

+0

Funziona come un fascino. E in realtà non abbiamo bisogno dell'ultima riga "Sei sicuro di voler lasciare la pagina?" in quanto sembra essere parte integrante della richiesta di conferma del browser (almeno Chrome). – cbmtrx

+0

Hmm, forse ho parlato troppo presto, @tymeJV. Sembra che - su Chrome, almeno - il 'window.onbeforeunload' chiama la funzione' confirmExit() 'prima che il clic del pulsante 'input.commit' sia registrato. Quindi fa scattare l'allarme anche sulla sottomissione del modulo. – 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. 
}); 

È possibile utilizzare la funzione Serializzazione modulo JQuery di Google, che raccoglierà tutti gli input di modulo e li salverà nell'array. Immagino che questa spiegazione sia sufficiente :)

+0

Alcune spiegazioni alla soluzione potrebbero aiutare e in più potresti guadagnare di più da essa. – suspectus

+0

ok, grazie per il tuo suggerimento, l'ho fatto. –

3

Questa non è una risposta esatta alla domanda di cui sopra ma per riferimento per coloro che sono alla ricerca di una soluzione al problema 'notifica agli utenti le modifiche ai moduli non salvate' come me, I ' Mi piacerebbe consigliare il plugin jQuery AreYouSure. Questo plugin molto leggero gestisce tutti i tipi di dadi e grassetto come le modifiche ai moduli ripristinati, facendo clic sul pulsante di reimpostazione del modulo, aggiungendo/rimuovendo i campi modulo ecc. Senza ulteriori trucchi.

0

Se si vuole impedire che la pagina di lasciare quando un link viene cliccato, è possibile associare all'evento beforeunload e superare 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

Non funziona per me: facendo clic su un collegamento o premendo il pulsante di ricarica nel browser, è sufficiente aprire/ricaricare la pagina. – Fabien

+1

Da https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload: "Dal 25 maggio 2011, la specifica HTML5 afferma che chiama a window.alert(), window.confirm () e i metodi window.prompt() possono essere ignorati durante questo evento. Consulta le specifiche HTML5 per maggiori dettagli. " – dieend

Problemi correlati