Ciao a tutti,

dopo aver provato e riprovato, dopo aver letto e riletto, sono qui a richiedere il vs aiuto.

Sto realizzando un progetto molto particolare che richiede di porre dei limiti alla textarea, ovvero limitare sia il numero di righe ma anche il numero di caratteri per riga. Facciamo un esempio: devo poter scrivere 3 righe da 30 caratteri, questo è solo un esempio, infatti ogni textarea in base ai parametri ROWS[max numero di righe] e COLS[max num di caratteri per riga], sarà personalizzata a seconda dell'uso.

Allora fino ad ora ho risolto i seguenti problemi:

- ho limitato il numero di caratteri totali,
- aggiungo un ritorno a capo quando raggiungo il limite di caratteri per la riga e le righe sono minori al max numero di righe a disposizione,
- controllo gli a capo ovvero se io digito 'pippo' - invio - 'pluto' - invio - 'paperino' e premo invio ancora non succede nulla resta li...

Il guaio accade quando per esempio dopo aver digitato pippo ed essere andato a capo. torno sulla riga pippo e continuo a scrivere...
A quel pto si perdono tutti i controlli..

codice:
$('textarea').keyup(function(){countRow(this);});

$('textarea').focus(function(){
   prevText = $(this).val();
   lR = $(this).attr('cols'); 
   nR = $(this).attr('rows');
   mC = (lR*nR)+(nR-1);
});

function countRow(e){
	if($.client.os != "Windows") var rows=$(e).val().split('\n');
	else var rows=$(e).val().split('\r');

	var tmp = rows.length;
	//controllo il numero di righe e di caratteri
	
	if(tmp>=nR) {
		$(e).val($(e).val().substr(0,$(e).val().length));
	}
	
	//controllo che i caratteri inseriti non siano maggiori di mC
	if($(e).val().length>=mC) {
		console.log('Verifica: L. tot > '+mC);
		$(e).val($(e).val().substr(0,mC));
	}

	//aggiungo un a capo ogni volta che raggiungo la max dimensione della riga 
	if($(e).val().length>0 && $(e).val().length%lR==0) {
	  if($(e).val().length<(mC - 1)) {
			console.log('Ho aggiunto una nuova riga');
			if($.client.os != "Windows") $(e).val($(e).val()+'\n');
			else $(e).val($(e).val()+'\r');
		}
		else $(e).val($(e).val().substr(0,mC));
	}
	
	//devo controllare se premo invio
	if(event.keyCode==13) {
		console.log('Premuto INVIO');
		if(tmp>nR) {
		  var l = $(e).val().length;
		  $(e).val($(e).val().substr(0,l));
		} 
		
	}
Per fare tutto ciò ho utilizzato JQuery e un plugin [jquery.client.js] che mi permette di identificare il SO in modo da distinguere se utilizzo \n o \r per andare a capo.

Certo di una qualche risposta anche del tipo tu sei Pazzo ringrazio tutti in anticipo