ciclo $.each non va

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Ciao a tutti,
ho questo problema, ho creato un form con alcuni campi che vengono aggiunti con jquery mediante una funzione onClick.
una volta inseriti i dati, non riesco ad inviarli tutti, ma mi viene stampata (ho fatto varie prove con console.log) solo l'ultima serie di dati.
ho provato varie combinazioni, premetto che non sono un esperto, ho imparato leggendo qui e la e da autodidatta, di cicli $.each, ma senza successo. Solo se creo un $.each singolo per ogni input riesco ad avere tutti i dati, poi però non riesco a riunirli ed inviarli.
questo è il codice del form, è all'interno di una funzione php
PHP:
$out='<div id="ordine">';
	$out.='<form action="?azione=test" method="post" enctype="multipart/form-data">';
	$out.='<legend class="margin_left margin_top"><h2>INSERIMENTO ORDINE DI ACQUISTO</h2></legend>';
	$out.='<div class="margin_left margin_top"><h2>Data ordine:</h2><input type="date" name="data_ordine" required></div>';
	$out.='<div class="margin_left margin_top">';
	$out.='<h2>Centrale di acquisto:</h2><h3>(* inserire almeno 3 caratteri)</h3>';
	$out.='<div class="float_left"><input class="ui-widget" name="nome_location" id="nome_location"  required placeholder="inserire la sede"/></div>';
	$out.='<div><input type="hidden" class="ui-widget" name="id_location" id="id_location" val=""/></div>';
	$out.='</div>';
	$out.='<div class="pulisci"></div>';
	$out.='<div class="margin_left margin_top">';
	$out.='<h2>Fornitore:</h2><h3>(* inserire almeno 3 caratteri)</h3>';
	$out.='<div><input type="text" class="ui-widget" name="cognome" id="cognome_fornitore" val="" required placeholder="inserire il fornitore"/></div>';
	$out.='<div><input type="hidden" class="ui-widget" name="id_fornitore" id="id_fornitore" val=""/></div>';
	$out.='<div id="nuovo_fornitore" class="button_new margin_top" ><h3><a class="text_white" href="" onClick=" return false">Carica un nuovo fornitore</a></h3></div>';
	$out.='</div>';
	$out.='<div class="pulisci"></div>';
	$out.='<div id="lista_prodotti">';
	$out.='<div class="aggiungi_prodotto button_new margin_left margin_top float_left" ><h3><a class="text_white" href="" onClick="return false">aggiungi un prodotto all\'ordine</a></h3></div>';
	$out.='<div id="elimina_prodotto" class="button_new margin_left"><h3 class="text_white"><a href="" class="text_white" onClick="return false">elimina dall\'ordine</a></h3></div>';
	$out.='<div id="nuovo_prodotto" class="button_new margin_left"><h3 class="text_white"><a href="" class="text_white" onClick="return false">carica un nuovo prodotto</a></h3></div>';
	$out.='<div class="pulisci"></div>';
	$out.='<div id="ordine_prodotto" class="margin_left margin_top ordine">';
	$out.='<div class="float_left" ><h3>Prodotto:</h3><input id="nome_prodotto" class="prodotto" type="text" name="product" required placeholder="nome prodotto"/></div>';
	$out.='<div><input type="hidden" class="ui-widget" name="id_prodotto" id="id_prodotto" val=""/></div>';
	$out.='<div class="float_left margin_left" ><h3>Quantità:</h3><input type="number" id="val_qnt" class="val_qnt" name="quantity" required placeholder="quantità prodotto"/></div>';
	$out.='<div class="float_left margin_left"><h3>Tipo quantità:</h3><select id="type_qnt" class="type_qnt" name="type_qnt"><option value="">Selezione il tipo quantità</option><option value="grammi">Grammi</option><option value="kg">Kg</option><option value="unità">Unità</option><option value="confezione">Confezione</option></select></div>';
	$out.='</div>';
	$out.='<div class="pulisci"></div>';
	$out.='</div>';
	$out.='<div><input id="submit" class="button_new margin_left margin_top text_white" type="submit" value="invia" onClick="return false"/></div>';
	$out.='<div class="pulisci"></div>';
	$out.='</form>';

e questo è invece il codice per la creazione dei nuovi input per l'inserimento dei dati
HTML:
$('.aggiungi_prodotto').on('click', 'a', function(e){
		e.preventDefault()
		var product = '<div class="float_left" ><h3>Prodotto:</h3><input type="text" id="nome_prodotto" class="autocomplete prodotto" name="product" required placeholder="nome prodotto"/></div>'
		var quantity ='<div class="float_left margin_left" ><h3>Quantità:</h3><input class="val_qnt"  type="text" name="quantity" required placeholder="quantità prodotto"/></div>';
		var type_qnt ='<div class="float_left margin_left"><h3>Tipo quantità:</h3><select class="type_qnt" name="type_qnt"/></select></div>';
		var option_type_qnt ='<option value="">Selezione il tipo quantità</option><option value="grammi">Grammi</option><option value="kg">Kg</option><option value="unità">Unità</option><option value="confezione">Confezione</option>';
		var pulisci = '<div class="pulisci"></div>';
		str_html = '<div id="ordine_prodotto" class="margin_top margin_left ordine">' + product + quantity + type_qnt + pulisci + '</div>';
		
		$('#lista_prodotti').append(str_html);
		$('#ordine_prodotto').insertAfter('#ordine_prodotto:last');
		$('.type_qnt').append(option_type_qnt);
	
		var name_product = $('#nome_prodotto');
		$.each(name_product, function(){
			$('.autocomplete').autocomplete({
			source: "ris_location.php?azione=prodotti",
			minLength: 3,
			
		});		
		});
	});

Spero che qualcuno riesca a darmi una mano, perchè sono fermo da 10 giorni, le ho provate tutte le soluzioni che mi venivano in mente, ma niente.....

Grazie
 
ho creato un form con alcuni campi che vengono aggiunti con jquery mediante una funzione onClick.
una volta inseriti i dati, non riesco ad inviarli tutti, ma mi viene stampata (ho fatto varie prove con console.log) solo l'ultima serie di dati.

<input type="text" id="nome_prodotto" name="product" ......
per risolvere devi dare un nome diverso ai campi di ciascuna riga rispetto alle altre, oppure usare un'array per ciascun campo
come può il "sistema" identificare cose diverse con nomi uguali ?
 
Grazie, immaginavo che il problema potesse essere quello. Una conferma devo creare un name univoco? Come posso fare? Oppure sai suggerirmi come farr un array per ogni input è poi inviare i dati?
Grazie mille
 
ti posto un esempio che puoi eseguire senza "timori", non fa nulla se non aggiungere/togliere righe e fare il post visualizzando quello che riceve,
in realtà molto banalmente aggiungo il valore di un contatore dopo il nome del campo
(scusa se non modifico il tuo ma è questione anche di tempo)
ciao
Marino

ps lo script è lungo perché ci sono anche campi a tendina ....

PHP:
<?php
if (empty($_POST)) {
?>
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Documento senza titolo</title>
    <!-- <link href="real-world.css" rel="stylesheet" type="text/css"> -->

    <script src="http://code.jquery.com/jquery-latest.js"></script>

    <script type='text/javascript'>
//<![CDATA[
	$(document).ready(function() {
		var currentItem = 1;
		AddRow(currentItem);

		$('#addnew').click(function(){
			currentItem++;
			AddRow(currentItem);
		});

		$('#removelast').click(function(){
			var rowID = '#row'+currentItem+'b'
			$(rowID).remove();
			var rowID = '#row'+currentItem+'a'
			$(rowID).remove();
			currentItem--;
			$('#items').val(currentItem);
		});

		function AddRow(currentItem) 
		{
			var strToAdd = NewRow(currentItem)
			$('#data').append(strToAdd);
			$('#items').val(currentItem);
		};

		function NewRow(currentItem) 
		{
			var strToAdd
='<tr id="row'+currentItem+'a">'
+'<td>Year</td>'
+'<td>:</td>'
+'<td>'
+'<select name="year'+currentItem+'" id="year'+currentItem+'" >'
+'<option value="2015">2015</option>'
+'<option value="2014">2014</option>'
+'</select>'
+'</td>'
+'<td>Month</td>'
+'<td>:</td>'
+'<td width="17%">'
+'<select name="month'+currentItem+'" id="month'+currentItem+'">'
+'<option value="1">January</option>'
+'<option value="2">February</option>'
+'<option value="3">March</option>'
+'<option value="4">April</option>'
+'<option value="5">May</option>'
+'<option value="6">June</option>'
+'<option value="7">July</option>'
+'<option value="8">August</option>'
+'<option value="9">September</option>'
+'<option value="10">October</option>'
+'<option value="11">November</option>'
+'<option value="12">December</option>'
+'</select>'
+'</td>'
+'<td width="7%">Week</td>'
+'<td width="3%">:</td>'
+'<td width="17%">'
+'<select name="week'+currentItem+'" id="week'+currentItem+'" >'
+'<option value="1">1</option>'
+'<option value="2">2</option>'
+'<option value="3">3</option>'
+'<option value="4">4</option>'
+'</select>'
+'</td>'
+'<td width="8%">&nbsp;</td>'
+'<td colspan="2">&nbsp;</td>'
+'</tr>'
+'<tr id="row'+currentItem+'b">'
+'<td>Actual</td>'
+'<td>:</td>'
+'<td width="17%">'
+'<input name="actual'+currentItem+'" id="actual'+currentItem+'" type="text" />'
+'</td>'
+'<td width="7%">Max</td>'
+'<td width="3%">:</td>'
+'<td>'
+'<input name="max'+currentItem+'" id="max'+currentItem+'" type="text" />'
+'</td>'
+'<td>Target</td>'
+'<td>:</td>'
+'<td>'
+'<input name="target'+currentItem+'" id="target'+currentItem+'" type="text" />'
+'</td>'
+'</tr>';
			return strToAdd;
		};
	});
//]]>
    </script>

    <style>
    </style>

  </head>

  <body>

    <form name='myform' method='POST'>
      <table class="dd" width="100%" id="data">
        <tbody>
        </tbody>
      </table>

      <input type="submit" name="submit"                     value="SubmitValues" />
      <input type="button" name="addnew"     id="addnew"     value="Add new item" />
      <input type="button" name="removelast" id="removelast" value="Remove last item" />
      <input type="hidden" name="items"      id="items"      value="0" />
    </form>
  </body>
</html>
<?php
}
else
{
  while(list($chiave, $valore)=each($_POST))
  {
    ${$chiave}=trim(strip_tags($valore));
    echo $chiave." = ".${$chiave}."<br />";
  }
}
?>
 
Ti ringrazio moltissimo per l'aiuto.
Domani mi studierò quello che mi hai mandato.
Intanto grazie ancora.
 

Discussioni simili