[Yii 1][RISOLTO]Pulsante Javascript "Aggiungi Destinatario"

Salve a tutti.

Ho un form per l’ invio di pacchi dove l’ utente inserisce mittente e destinatario per procedere alla creazione della lettera di vettura.

Ora vorrei inserire un pulsante “+” sotto il form del destinatario in maniera tale che se il mittente deve inviare 10 pacchi a 10 destinatari diversi possa utilizzare questo pulsante. Vorrei infatti che se l’ utente clicca sul pulsante “+” si aggiunga alla pagina un nuovo form con i campi del destinatario in maniera tale che se ha 10 invii da fare e il mittente è sempre lo stesso gli basterà cliccare su “+” per aggiungere destinatari. Questo per evitare che ogni volta se ha piu destinatari debba compilare tutto dall’ inizio.

Qualcuno può indicarmi qualche guida o link oppure se preferisce può farmi un esempio su come posso strutturare la cosa???

Sicuramente Java Script non si puo’ leggere. Javascript e Java non sono nemmeno parenti. Detto questo, …

mi sembra tu abbia bisogno di un bottone, ed uno spazio nella pagina dove poter aggiungere i nuovi pacchi:




<button id="il_bottone">+</button>

<div id="spazio_per_i_pacchi"></div>



A questo punto, con javascript puoi modificare il dom della pagina. Ecco un esempio:




var pacchi_aggiunti = 0;

var aggiungi_bottone_handler = function() {

    pacchi_aggiunti++;

    $('<div id="pacco_numero_' + pacchi_aggiunti + '"></div>')

       .appendTo($('#spazio_per_i_pacchi'));

}

$(function(){

    $('#il_bottone').on('click', aggiungi_bottone_handler);

});



Immagino tu abbia bisogno di qualche cosa di piu’ complesso di un semplice:




$('<div id="pacco_numero_' + pacchi_aggiunti + '"></div>');



ma spero di possa essere comunque di ispirazione

Java Script … Forse mi è partito un tocco sulla barra spaziatrice ? che ne dici? Sennò come pensi mi funzionino gli JavaScript che uso sul sito? ^_^ Detto questo…

grazie dei suggerimenti Sensorario, appena ho tempo testo questa soluzione e cerco di capire come posso implementarla anche a livello di Controller perchè l’ action deve generarmi un tracking per ogni destinatario. E’ vero che riesco già a generare tracking univoci multipli su un altra Action che utilizzo tramite il ciclo for …i++ etc lavorando con dati di sessione. Ora vedo come posso implementare il tuo suggerimento su un’ altra action e poi aggiorno il post se ho problemi. Come sempre grazie ancora…dei suggerimenti utili.

Eheheh, non sai quanta fortuna ci sia in giro riguardo ad un certo Java lato client. Appunto, … lo scripting di Java. XD

Ciao sensorario ti ringrazio nuovamente per il tuo esempio perchè mi ha aiutato.

Ora voglio usarlo in un form dove ho un array di records che ricevo da una query.

E’ una preparazione di stampa della fattura. Gli articoli li recupero dalla query.

Ora voglio inserire il pulsante "+" per far si che sotto ad ogni articolo mi appaia una riga (sotto forma di $form->…etc) per poter aggiungere informazioni prima di processare il tutto e passare i dati alla stampa.

Ho applicato il tuo procedimento ma ogni qualvolta che clicco sul pulsante “+” la parte dove aggiungere le info all’ articolo mi si apre sempre e solo sotto il primo record.

Esempio di cio che vorrei:

1 record +(pulsante che al click apre il campo aggiuntivo)

1-----------------------campo aggintivo

2 record +(pulsante che al click apre il campo aggiuntivo)

2-----------------------campo aggintivo

3 record +(pulsante che al click apre il campo aggiuntivo)

3-----------------------campo aggintivo

Invece Ottengo questo:

1 record +(pulsante che al click apre il campo aggiuntivo)

1-----------------------campo aggintivo

3-----------------------campo aggintivo

2-----------------------campo aggintivo

2 record +(pulsante che al click apre il campo aggiuntivo)

3 record +(pulsante che al click apre il campo aggiuntivo)

Quindi ad ogni click mi apre il campo aggiuntivo sempre sotto il primo record e non riesco a venirne fuori.

Potresti darmi un’ altra “spinta” sempre riferendoti al codice sopra indicato da te? ;D così cado nel burrone ;D .

Ovviamente sempre che questo sia possibile farlo in questa maniera.

Si accettano anche opinioni di terze parte ;D

Allego 2 file in cui nel primo si vede l’ attuale vista con il pulsante"+" sotto ogni record.

Nel secondo allegato si vede cosa succede al click sul pulsante "+"…funziona solo il primo pulsante e gli altri non fanno nulla se ci clicco sopra, e come accennato prima ad ogni click si aggiunge un campo aggiuntivo sotto al primo record.

Non so se sia possibile fare un cliclo for(…){} "ciclando" i pulsanti…ma non so come dovrei impostarlo visto che il form dei records è dato da una query e faccio già un foreach delle tabelle con i record nella vista.

Vabbè se sto scrivendo caxxate sparate pure ;D

Ecco il mio codice interessato del problema…in caso serva:




....................

....................

<?php

		////////RECUPERO TUTTI GLI ID PASSATI TRAMITE GET 

		///////RICERCO I PRODOTTI PASSATE PER LA FATTURA E RECUPERO I LORO DATI

		$ricerca = Missiva::model()->findAllByAttributes(array('missiva_id'=>$_GET['id_miss']));

        $conta = count($ricerca);

        if($conta > 0){

        $prodotto = array();

        foreach($ricerca as $risultati)

        array_push($prodotto,$risultati->missiva_id);

        }

////RECUPERO I DATI DALLA TABELLA PER STAMPARE LA FATTURA		 

$ricerca2 =Missiva::model()->findAllByAttributes(array("missiva_id"=>$prodotto));

foreach($ricerca2 as $dati){

	$imponibile = $dati->totale/1.22;

	?>		

					<tr>

    

		<td class="tabella_info_campo_descrizione" style="text-align:left; font-size:12px;">

		<div id="prodotto">

		<?php 

		if($dati->filiale_destinazioneid <1){

		echo $form->textField($fattura,'prodotto',array('style'=>'width: auto', 'value'=>$dati->prodotto, 'readonly'=>true, 'style'=>'font-size:12px'))

		.'<br /><b>Verso</b> '.$dati->cliente_cap.', '.$dati->cliente_comune.' ('.$dati->cliente_provincia.')'.' - <b>Consegna</b>: '.$dati->vettore;

		}else{

			echo $form->textField($fattura,'prodotto',array('style'=>'width: auto', 'value'=>$dati->prodotto, 'readonly'=>true, 'style'=>'font-size:12px'))

		.'<br /><b>Verso</b> '.$dati->cliente_cap.', '.$dati->cliente_comune.' ('.$dati->cliente_provincia.')'.' - <b>Consegna</b>: '.$dati->filiale_destinazione;

		}?>

		<?php echo $form->error($fattura,'prodotto'); ?>

		</div>

		<div id="prodotto2" >

	<?php echo CHtml::button('+', array('id'=>'il_bottone'));?>

		</div>

		<div id="spazio_per_i_pacchi"></div>

        </td>

		

		<td class="tabella_info_campo_descrizione" style="text-align:left;">

		<?php echo $form->textField($fattura,'peso',array('class'=>'span1','maxlength'=>50, 'value'=>$dati->peso, 'readonly'=>true, 'style'=>'font-size:12px')); ?>

		<?php echo $form->error($fattura,'peso'); ?>

        </td>

		

		<td class="tabella_info_campo_descrizione" style="text-align:left;">

		<?php

		$menu_data = array('22%'=>'22%', 'ART.E15'=>'ART.E15');

		echo $form->dropDownList($fattura, 'iva', $menu_data, array('style'=>'width: auto; font-size:12px'));

        ?>

		<?php echo $form->error($fattura,'iva'); ?>

        </td>

		<td class="table_info_data">

		<?php echo $form->textField($fattura,'totale',array('class'=>'span1','maxlength'=>50, 'value'=>number_format($imponibile,2,'.',''), 'style'=>'width:auto', 'style'=>'font-size:12px')); ?>

		<?php echo $form->error($fattura,'totale'); ?>

        </td>

        </tr>

		<?php }?>		




       <tr class="tabella_info_footer">

	   <td colspan="5" class="tabella_chiusura_form">

       <?php echo CHtml::submitButton('Stampa' ,array('class'=>'btn btn-primary btn-small')); ?>       

       <?php $this->endWidget(); ?>

        </td>

        </tr>

        </tbody>

        </table>

       </div>


	   

	   

	   <script type="text/javascript">

	   var pacchi_aggiunti = 0;

var aggiungi_bottone_handler = function() {

    pacchi_aggiunti++;

    $('<div id="pacco_numero_' + pacchi_aggiunti + '"><?php 

		if($dati->filiale_destinazioneid <1){

		echo $form->textField($fattura,'prodotto',array('style'=>'width: auto',  'style'=>'font-size:12px'));

		}else{

			echo $form->textField($fattura,'prodotto',array('style'=>'width: auto',  'style'=>'font-size:12px'));

		}?></div>')

       .appendTo($('#spazio_per_i_pacchi'));

}

$(function(){

    $('#il_bottone').on('click', aggiungi_bottone_handler);

});

</script>



Un Saluto

Per ora ho risolto cosi:




<script>

var maxFieldWidth = "500";


function addRow(element, indentFlag)

{

var elementClassName = element.className; 


var fieldNumber = elementClassName.substr(3, elementClassName.length);




var fieldWidth = document.getElementById("textfield" + fieldNumber).style.width; 

fieldWidth = fieldWidth.substr(0, fieldWidth.indexOf("px"));




var newFieldNumber = ++fieldNumber;


var newFieldWidth = fieldWidth;

if(indentFlag)

newFieldWidth = fieldWidth - (newFieldNumber * 10);


var rowContainer = element.parentNode; 




var textfield = document.createElement("input");

textfield.type = "text";

textfield.setAttribute("value", "SE VOGLIO INSERISCO UN VALUE " + newFieldNumber);

textfield.id = "textfield" + newFieldNumber;

textfield.setAttribute("class","span6");




rowContainer.appendChild(document.createElement("BR"));

rowContainer.appendChild(textfield);

rowContainer.appendChild(document.createTextNode(" "));

rowContainer.appendChild(button1);


}

</script>



Sembra che tutto fuzioni ma devo fare dei test.

Il risultato è ciò che volevo e cioè che venisse creato un campo aggiuntivo al click sul bottone sotto il record interessato. Questo funziona. Ora vedrò se funziona anche tutto il resto.