Visualizzazione dei risultati da 1 a 10 su 10

Discussione: a chiusura submit form

  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    a chiusura submit form

    Problemino con la chiusura del browser...

    Non voglio assolutamente impedire che ciò accada.

    Vorrei semplicemente creare alla chiusura della pagina attuale una finestra di dialogo che dica:

    "Hai chiuso la finestra senza salvare i cambiamenti!Desideri farlo?"

    Se si clicca su "si" si dovrebbe inviare il form presente nella pagina chiusa. Come fare??


  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Puoi provare cosi...

    codice:
    <HTML>
    <HEAD>
    <SCRIPT>
    function closeIt() {
     changes = false; 
     if (prevNome != document.getElementById('nome').value) changes = true;
     if (prevCognome != document.getElementById('cognome').value) changes = true;
     if (changes) {
      event.returnValue = "Hai fatto delle modifiche.";
     } // if (changes) 
     return true;
    }
    </SCRIPT>
    </HEAD>
    <BODY onbeforeunload="closeIt()">
    
    <form id="f1" action="test947.html" method="post">
    Nome :<input type="text" id="nome">
    
    Cognome :<input type="text" id="cognome">
    </form>
    <script language="JavaScript" type="text/javascript">
    <!--
    prevNome    = document.getElementById('nome').value;
    prevCognome = document.getElementById('cognome').value;
    //-->
    </script>
    
    </BODY>
    </HTML>

  3. #3
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    grazie

    sto provando...

    ti faccio sapere (ehm vi faccio... :rollo: )


  4. #4
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    perfetto!!!

    ma solo con explorer. Con il firefox non va.


  5. #5
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    L'evento onbeforeunload e' gestito solo da IE, per tutti gli altri dovresti provare ad utilizzare onnload

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  6. #6
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    sicuramente intendi dire onUnload...

    cmq non funziona (per una volta mi sa che ha vinto IE VVoVe: )

    si può dire?

  7. #7
    é molto bello questo script. ma c'è un modo per evitare che l'alert si apra anche quando clicco sul pulsante di invio?

  8. #8

    io ho questa soluzione

    Vorrei condividere con voi questa funzione che ho creato.
    Tag Body: <body onload="valori_form(0);" onunload="confronta_form();">
    funzione in Head:
    Codice PHP:
    // funzione per memorizzare i valori dei campi dei moduli presenti in pagina in array.
    function valori_form(cosa) {
        var 
    frm document.forms;
        var 
    valori = new Array();
        var 
    contatore 0;
        for (var 
    i=0i<frm.lengthi++) {
            var 
    elm=frm[i].elements;
            for (var 
    j=0j<elm.lengthj++) {
                if (
    frm[i].elements[j].type=="checkbox" || frm[i].elements[j].type=="radio") {
                    if (
    frm[i].elements[j].checkedvalori[contatore]="_" frm[i].elements[j].value "_1";
                    else 
    valori[contatore]="_" frm[i].elements[j].value "_0";
                    
    contatore++;
                } else if (
    frm[i].elements[j].type=="select-one" || frm[i].elements[j].type=="select-multiple") {
                    var 
    opt=frm[i].elements[j].options
                    
    for (var x=0x<opt.lengthx++) {
                        if (
    opt[x].selected == truevalori[contatore]="_" opt[x].value "_1";
                        else 
    valori[contatore]="_" opt[x].value "_0";
                        
    contatore++;
                    }
                } else {
                    
    valori[contatore]="_" frm[i].elements[j].value;
                    
    contatore++;
                }
            }
        }
        if (
    cosa) {
            
    valori_finali=valori;
            
    // document.write("
    Valori Finali
    ");
            // for (var x=0; x<valori_finali.length; x++) document.write(x + "
    " + valori_finali[x] + "
    ");
        } else {
            valori_iniziali=valori;
            // document.write("
    Valori Iniziali
    ");
            // for (var x=0; x<valori_iniziali.length; x++) document.write(x + "
    " + valori_iniziali[x] + "
    ");
        }
    }
    function confronta_form() {
        valori_form(1);
        for (var x=0; x<valori_finali.length; x++) {
            if (valori_iniziali[x]!=valori_finali[x]) {
                var conferma=confirm("
    Salvare le modifiche effettuate?!");
                if (conferma) {
                    frmmod=valori_finali[x].substr(0,2);
                    if (frmmod.substr(1,1)=="
    _") frmmod=frmmod.substr(0,1);
                    // alert ("
    document.forms["+frmmod+"].submit();");
                    document.forms[frmmod].submit();
                    break;
                } else {
                    break;
                }
            }
        }
    }
    //--> 
    Apro un array al load del documento contenente tutti i valori dei campi di tutti i form presenti in pagina;
    Quando esco dal documento creo un nuovo array e poi lo ciclo confrontandolo con il primo creato; quando trovo una differenza mi prendo il numero del form modificato e chiedo se farne il submit o meno.

    E' adattabile pressochè ovunque.

    Tra le cose che andrebbero ottimizzate: adesso lui prende per buona la prima modifica che trova e fa il submit di quel modulo; ma se io avessi modificato il contenuto di + moduli?! Potrei far scegliere in qualche modo all'utente quale modificare (modificarli entrambi penso non sia possibile...). Infine, non funzia se chiudo la pagina dalla X del browser... funzia se cambio pagina o refresho, ma non alla chiusura tramite la X.
    Vi va di aiutarmi in questo?!
    CIAO, spero di essere stato utile.

    P.S. Funzia sia su IE che FF!!!

  9. #9
    Altro piccolo bug del codice:

    crea un'array con i valori dei campi (TUTTI i tipi di campi...) di tutti i moduli in una pagina (fino a 99 moduli) all'onload; all'onunload ne crea un altro e lo confronta con il primo; se riscontra differenze chiede se salvare (cioè inviare il modulo) o meno (eseguire la richiesta dell'utente di cambio pagina o refresh - attualmente sulla chiusura finestra non funzia...);

    dato che poi si può riagganciare ad uno script di controllo dei dati immessi, se l'utente sceglie di salvare (cioè fare il submit), il comportamento che viene fuori è il seguente:
    1) se il modulo è formalmente corretto tutto bene, la richiesta dell'utente viene reindirizzata all'action di quel modulo e i dati vengono inviati.
    2) se ci sono incongruenze (e solitamente lo script di controllo propone un alert, mette il focus sul campo con errore, e poi si ferma...) vengono proposti gli alert di rito, ma poi viene soddisfatta la prima richiesta dell'utente, che così non può modificare eventuali dati immessi e poi salvare...

    Se a qualcuno piace arrovellarcisi, possiamo ottimizzarlo ancora per poi renderne uno strumento di facile implementazione (basta schiaffarlo in pagina...).

  10. #10
    Riporto sù questo Post, per cercare qualcuno che mi aiuti a completare la soluzione di cui sopra e su cui invito a leggere la mia risposta precedente...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.