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>'
);
}
});
}