Ciao ragazzi.
Ho scritto questa funzione ma non si comporta come mi aspetto:
La funzione stampa tramite JQuery in una pagina due campi di input ogni volta che clicco sul pulsante +.
Poichè questi campi vengono poi salvati su un database, li sto indicizzando assegnando un valore incrementale tramite una variabile $i.
All'inizio della funzione questa variabile $i viene inizializzata, quindi io mi aspetto che ogni qualvolta clicco sul pulsate + lui cominci da 0 e di volta in volta mi incrementi la variabile di 1.
In realtà questo non accade e già alla seconda chiamata della funzione, lui aggiunge più campi alla pagina tutti con lo stesso valore della variabile $i.
Se la prima volta che chiamo la funzione 'contenutogomma' il contenuto di obj (che viene passato da php tramite una chiamata ajax) contiene 3 valori (chiamiamole righe per semplicità), lui mi crea 3 righe con i relativi campi input. Ora io aggiungo una 4° riga cliccando sul pulsante +, salvo e richiamo il contenuto di un'altra gomma (un contenitore con delle righe al suo interno). Fin qui tutto perfetto.
Il server restituisceil valore di obj con 2 righe. La funzione quindi mi creerà due righe con i relativi campi di input.
Se clicco ancora sul pulsante +, io mi aspetto che lui mi crei 1 riga per arrivare ad un totale di 3, in realtà mi crea 2 righe.
Quindi eseguo una nuova richiesta al server, ipotizziamo che mi restituisca un obj, con 1 sola riga.
Chiedo alla funzione tramite il pulsante + di aggiungere una riga e invece ne vengono aggiunte 3.
Tutte con il valore della variabile $i settato al risultato della chiamata precedente come se non venisse inizializzato.
Sapete aiutarmi?
Questo è il codice della funzione
codice:function contenutogomma(obj){ console.log('Il valore di $i appena accedo a contenutogomma',$i); //sviluppo la gestione delle linee. var $i=0 console.log('Il valore di $i dopo aver dichiarato la variabile $i',$i); $('#aggiorna').html('<input type="hidden" name="action" value="aggiorna">' +'<input type="hidden" class="aggiorna campo" name="aggiorna" value="'+obj.input+'">'); $('#aggiorna') .prepend('<p><input type="submit" value="Registra" class="'+obj.act+'"></p>') .on('click','.badd',function(e){ console.log('Aggiungo una riga'); console.log('Il valore di $i prima dell\'incrementeo è',$i); $i++ console.log('Il valore di $i subito dopo l\'incrementeo è',$i); var rowItem='<p class="row n'+$i+'"><input type="text" name="row['+$i+'][articolo]" value="" />' +'<input type="text" name="row['+$i+'][extra]" value="" />' +'<input type="hidden" name="row['+$i+'][id]" value="new" />' +'<b name="badd" class="badd">+</b><b name="bdel" class="bdel">-</b></p>'; $("#aggiorna").append(rowItem); console.log('Abbiamo un totale di '+$(".row").length+' righe'); }) .on('click','.bdel',function(e){ console.log('Cancello una riga'); if($(".row").length > 1){ //controllo se la riga è nuova o ha un ID console.log(' la riga è '+$(this).siblings("input[name*='id']").val()); let riga_da_cancellare=$(this).siblings("input[name*='id']").val(); //se la riga è nuova la cancello if( riga_da_cancellare == 'new'){ $(this).parents(".row").remove(); }else{ //se la riga ha un id, la elimino dal dB, quindi la cancello. $.ajax({ type: "POST", url: 'gomme.php', data:{action:"delrig", delrig:riga_da_cancellare}, success: function(result) { updatebtn(1); } }); $(this).parents(".row").remove(); console.log('non posso cancellare la riga con id '+riga_da_cancellare); } } console.log('Abbiamo un totale di '+$(".row").length+' righe'); }); $.each(obj.res, function(index, item) { if(obj.act=="modifica"){ $('#aggiorna').append( '<p class="row"><input type="text" name="row['+item.id+'][articolo]" value="'+item.articolo+'" />' +'<input type="text" name="row['+item.id+'][extra]" value="'+item.extra+'" />' +'<input type="hidden" name="row['+item.id+'][id]" value="'+item.id+'" />' +'<b name="badd" class="badd">+</b><b name="bdel" class="bdel">-</b></p>' ); }else{ $('#aggiorna').append( '<p class="row"><input type="text" name="row[0][articolo]" value="" />' +'<input type="text" name="row[0][extra]" value="" />' +'<input type="hidden" name="row[0][id]" value="new" />' +'<b name="badd" class="badd">+</b><b name="bdel" class="bdel">-</b></p>' ); } }); }

Rispondi quotando
