Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Check di campi generati dinamicamente in un form

    Ciao a tutti.
    Sperando che qualcuno sia già incappato in questa tipologia di problema, vi espongo il mio.

    Ho avuto la necessità di realizzare un form di inserimento dati, con la possibilità che alcuni campi venissero generati dall'utente in fare di inserimento.

    l'esempio in questione, riguarda la compilazione di una scheda di un viaggio, e fin qui il problema non esiste, si presenta al momento che l'agenzia di viaggio inserisce i periodi; quindi: partenza,ritorno e relativo prezzo.

    inizialmente la schermata prevede una riga con questi tre campi denominati: partenza[0], ritorno[0] e txt_prezzo[0].

    il codice javascript per aggiungere le successive righe che ho utilizzato è il seguente:

    codice:
    var num=1;
    function accoda(){
    if(document.createElement && document.getElementById && document.getElementsByTagName) {
    // crea elementi
    var oTr=document.createElement("TR");
    var oTd0=document.createElement("TD");
    var oTd1=document.createElement("TD");
    var oTd2=document.createElement("TD");
    var oTd3=document.createElement("TD");
    				
    var oField=document.createElement("INPUT");
    var oField1=document.createElement("INPUT");
    var oField2=document.createElement("INPUT");
    var oField3=document.createElement("INPUT");
    				
    // setta attributi
    oField.setAttribute("type","text");
    oField.setAttribute("name","partenza["+num+"]");
    oField.setAttribute("id","partenza["+num+"]");
    oField.setAttribute("size","10");
    						
    oField1.setAttribute("type","checkbox");
    oField1.setAttribute("name","chk"+num);
    						
    oField2.setAttribute("type","text");
    oField2.setAttribute("name","ritorno["+num+"]");	
    oField2.setAttribute("id","ritorno["+num+"]");	
    oField2.setAttribute("size","10");
    						
    oField3.setAttribute("type","text");
    oField3.setAttribute("name","txt_prezzo["+num+"]");	
    oField3.setAttribute("id","txt_prezzo["+num+"]");	
    // appendi al relativo padre
    oTd0.appendChild(oField1);
    oTd1.appendChild(oField);
    oTd2.appendChild(oField2);
    oTd3.appendChild(oField3);
    				
    oTr.appendChild(oTd0);
    oTr.appendChild(oTd1);
    oTr.appendChild(oTd2);
    oTr.appendChild(oTd3);
    						
    document.getElementById('tabella').getElementsByTagName('TBODY')[0].appendChild(oTr);
    				
    // incrementa variabile globale
    num++
    }
    ed anche qui tutto bene, gli elementi vengono creati correttamente ed i periodi vengono salvati altrettanto correttamente nel database, mediante altro codice php.


    il problema nasce se l'agenzia, di viaggio inserisce ad esempio due periodi, salva l'offerta, ma si accorge di avere bisogno di aggiungere altri periodi accodati ai precedenti, rientra nella schermata, trova all'interno della scheda i due periodi, ma nell'atto di accodarne uno nuovo, il contatore num; utilizzato nel javascript, riparte da 1 e non dall'ultimo ora presente nel form.

    Vorrei in sostanza individuare l'ultimo periodo inserito: es partenza[4] e far ripartire il contatore per un nuovo inserimento dal numero 5.

    Ho girato come un pazzo "googlando" ed anche all'interno di questo forum, ma non risco a trovare il modo di risolvere l'arcano.

    Potete aiutarmi?

  2. #2
    Prova in questa maniera...

    codice:
    var MyFunction =
    {
    	num : 1,
    	
    	accoda : function()
    	{
    	  if(document.createElement && document.getElementById && document.getElementsByTagName) {
    	  // crea elementi
    	  var oTr=document.createElement("TR");
    	  var oTd0=document.createElement("TD");
    	  var oTd1=document.createElement("TD");
    	  var oTd2=document.createElement("TD");
    	  var oTd3=document.createElement("TD");
    					  
    	  var oField=document.createElement("INPUT");
    	  var oField1=document.createElement("INPUT");
    	  var oField2=document.createElement("INPUT");
    	  var oField3=document.createElement("INPUT");
    					  
    	  // setta attributi
    	  oField.setAttribute("type","text");
    	  oField.setAttribute("name","partenza["+MyFunction.num+"]");
    	  oField.setAttribute("id","partenza["+MyFunction.num+"]");
    	  oField.setAttribute("size","10");
    							  
    	  oField1.setAttribute("type","checkbox");
    	  oField1.setAttribute("name","chk"+MyFunction.num);
    							  
    	  oField2.setAttribute("type","text");
    	  oField2.setAttribute("name","ritorno["+MyFunction.num+"]");	
    	  oField2.setAttribute("id","ritorno["+MyFunction.num+"]");	
    	  oField2.setAttribute("size","10");
    							  
    	  oField3.setAttribute("type","text");
    	  oField3.setAttribute("name","txt_prezzo["+MyFunction.num+"]");	
    	  oField3.setAttribute("id","txt_prezzo["+MyFunction.num+"]");	
    	  // appendi al relativo padre
    	  oTd0.appendChild(oField1);
    	  oTd1.appendChild(oField);
    	  oTd2.appendChild(oField2);
    	  oTd3.appendChild(oField3);
    					  
    	  oTr.appendChild(oTd0);
    	  oTr.appendChild(oTd1);
    	  oTr.appendChild(oTd2);
    	  oTr.appendChild(oTd3);
    							  
    	  document.getElementById('tabella').getElementsByTagName('TBODY')[0].appendChild(oTr);
    					  
    	  // incrementa variabile globale
    	  MyFunction.num++
    	}
    
    };
    Ovviamente la funzione la richiamerai in questo modo : MyFunction.accoda();


  3. #3
    Ciao, grazie è scusa per il ritardo, ma sono tornato operativo solo oggi.

    Lo script funziona finalmente, grazie ancora, ma ho un altro piccolo/grande problema.

    Tra i campi dinamici, ci sono due campi partenza e ritorno che prevedono delle date.

    Il problema, anche se sembra piccolo è di notevole difficoltà (almeno per me) in quanto questo script è parte integrante di un componente per joomla e non riesco a richiamare dinamicamente il calendario del CMS.

    Ti è già capitata una cosa del genere?

  4. #4
    Allora non ho mai utilizzato Joomla per cui nn so se ti sto dando un consiglio sbagliato, più che altro è una prova, ma sono sicuro che persone mooooolto più esperte di me ti sapranno dare una mano come di deve..

    io metterei quanto segue:
    codice:
    var MyFunction =
    {
    	num : 1,
            campoData1 : nomeCampoData1NelCMS,
            campoData2 : nomeCampoData2NelCMS,
    .
    
    .
    .
    .
    in questo modo in MyFunction.campoData1 e in MyFunction.campoData2 avrai i campi già caricati quando li richiami..

    Ma non saprei se il mio consiglio può essere utile..

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.