stai facendo confusione, se tu guardi il codice generato della pagina( tasto destro-> vedi html/sorgente) vedrai che tutti gli input hanno lo stesso id, questo crea problemi al tuo script in quanto il metodo getElementById o l'equivalente jquery $('#id') recupera solo il primo elemento con quell'id. Detto questo puoi anche fregartene e fare riferimeno alla classe invece che all'id, diversamente dall'id la classe puo anche essere ripetuta su più elementi html. Ecco come lo farei io:
codice:
<?
// Connessione
$q=mysql("$NOME_DBASE","SELECT * FROM tabella order by ID") or die(mysql_error());
while ($row = mysql_fetch_row($q)) {
$ID=$row['0'];
$QUANTITA=$row['1'];
?>
<input name="quantita" type="text" value="<? echo $QUANTITA;?>" size="3" maxlength="5" class="button2">
<? } ?>
<script>
$(".button2").change(function(){
$('#loader').show();
var QQ=$(this).val();
var IDRIGO='<? echo $ID; ?>';
//ESECUZIONE DELLA CHIAMATA AJAX
$.ajax(
{
type: 'POST',
url: '<? echo "insert.php"; ?>',
data: {QQ:QQ, N:IDRIGO},
success: function(data){
if(data.error==1){
alert("Errore");
}else{
alert("Registrazione ok "+IDRIGO);
}
$('#loader').hide();
$('#invia').attr('disabled',false);
},
complete: function(data){},
failure: function(data){
alert("Errore nella chiamata ajax");
$('#loader').hide();
$('#invia').attr('disabled',false);
}
});
});
<script>