Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8

    Invio due form con singolo submit

    Salve, avrei un problema che non riesco a risolvere.

    Ho una pagina con 2 form distinte, per motivi vari il risultato che devo ottenere è far si che premendo il submit della seconda vengano inviati anche i dati della prima.

    Quello che avevo pensato di fare era questo:

    Prendere i valori della prima utilizzando il comando di jQuery serialize() che mi restituisce una stringa del tipo:
    a=1&b=2&c=3&d=4&e=5

    A questo punto mi serve portare tutti i valori della prima nella seconda e far si che quando premo il submit mi invii entrambi.

    Avevo pensato di di dividere i dati della stringa con lo split(), però non mi sembra un idea molto azzeccata, qualcuno potesse suggerirmi qualche soluzione?

    Grazie mille!

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    al submit del secondo form

    0- preventdefault
    1- serializzi il primo form
    2- serializzi il secondo form
    3- concateni le due stringhe
    4- $.ajax({
    type: 'POST',
    url:<form2.action>,
    data: <concatenazione>
    });
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    Allora, io ho fatto la seguente cosa:

    codice:
    jQuery('.contact_box2 div input[type="submit"]').submit(function(){
    
          var first_form=jQuery('.contact_box form').serializeArray();
          var second_form=jQuery('.contact_box2 form').serializeArray();
    
          var result_form=jQuery.merge( first_form, second_form );
    
          jQuery.post("url", result_form);
       });
    Tuttavia come risultato ottengo che mi arriva l'email con esclusivamente i dati della seconda form, qualche consiglio?

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da Aizen
    Allora, io ho fatto la seguente cosa:

    codice:
    jQuery('.contact_box2 div input[type="submit"]').submit(function(){
    
          var first_form=jQuery('.contact_box form').serializeArray();
          var second_form=jQuery('.contact_box2 form').serializeArray();
    
          var result_form=jQuery.merge( first_form, second_form );
    
          jQuery.post("url", result_form);
       });
    Tuttavia come risultato ottengo che mi arriva l'email con esclusivamente i dati della seconda form, qualche consiglio?
    1) non hai fatto preventdefault quindi il submit continua ad essere eseguito
    2) perchè usi il merge per concatenare due stringhe? (result_form = first_form + "&" + second_form);
    3) non stai passando correttamente result_form alla chiamata ajax
    4) jQuery.post("url", result_form); l'hai scritto proprio così?
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    1) non hai fatto preventdefault quindi il submit continua ad essere eseguito
    Dove bisogna farlo questo? Come attributo del submit del form?

    2) perchè usi il merge per concatenare due stringhe? (result_form = first_form + "&" + second_form);
    Non so, avevo visto che c'era come funzione e ho pensato di utilizzarla, dici che non mi da lo stesso risultato?

    3) non stai passando correttamente result_form alla chiamata ajax
    Cioè? Non basta mette il nome della variabile contenente il risultato degli array?

    4) jQuery.post("url", result_form); l'hai scritto proprio così?
    No no, al posto di url ho messo quello che mi dava nel form action del secondo form.

    Grazie mille ancora per l'aiuto!

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    ho visto dopo che avevi usato serializeArray invece di serialize(), per cui il merge poteva andare bene
    per il resto:

    codice:
    jQuery('.contact_box2 div input[type="submit"]').submit(function(evt){
    
          //0- preventdefault
          evt.preventDefault();
         ....
    });
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    Niente da fare purtroppo, ora il codice è il seguente:

    codice:
       jQuery('.contact_box2 div input[type="submit"]').click(function(evt){
          
          //0- preventdefault
          evt.preventDefault();
          
          var first_form=jQuery('.contact_box form').serializeArray();
          var second_form=jQuery('.contact_box2 form').serializeArray();
    
          var result_form=jQuery.merge( first_form, second_form );
              
          alert(result_form);
          return false;
    
          jQuery.post("/acr/process_form", result_form);
       });
    Come risultato continua ad inviarmi la terza form come un normale submit.

    Ho provato a inserire nel codice
    codice:
          alert(result_form);
          return false;
    Questo è ciò che mi da, quindi suppongo che ci sia qualcosa che non prenda...

    [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

  8. #8
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    copia e incolla questa demo

    codice:
    <!doctype html>
    <html lang="it">
    <head>
      <meta charset="utf-8">
    </head>
    
    <body>  
    
        <form action="script1.php" id="form1">
            <fieldset>
                <input type="text" name="i1" value="v1" />
                <input type="text" name="i2" value="v2" />
                <input type="text" name="i3" value="v3" />
            </fieldset>
            <button type="submit">invia form 1</button>
        </form>
    
        <form action="script2.php" id="form2">
            <fieldset>
                <input type="text" name="i4" value="v4" />
                <input type="text" name="i5" value="v5" />
                <input type="text" name="i6" value="v6" />
            </fieldset>
            <button type="submit">invia form 2</button>
        </form>
    </body>
    		
    
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"> </script>   
    <script>
    $(document).ready(function() {
        var form1 = $('#form1'),
            form2 = $('#form2');
            
        form2.bind('submit', function(evt) {
            
            var s1 = form1.serialize(),        
                s2 = form2.serialize(),
                serializedData = [s1, '&', s2].join('');
                
            $.ajax({
                method  : 'post',
                url     : form2.attr('action'),
                data    : serializedData,              
            })  
            
            evt.preventDefault();   
        });   
    });
    </script>
    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.