Newsgroup: it.comp.lang.javascript
Titolo: conteggio caratteri textarea senza invio

ciao a tutti ragazzi,
sono quasi riuscito ad arrivare al mio intento con questo script che conta
i caratteri, ma non vorrei che contasse gli invii (le newline... insomma)
<SCRIPT LANGUAGE="javascript">
function conta(obj){
	var lenMax=250
	var strlength=document.modulo.testo.value.length
	total = eval("250")
	char = eval(document.modulo.testo.value.length)
	left = eval(total - char)
	if (left <= "-1")
	{
	var dif = eval(char - 250)
	var value = document.modulo.testo.value.substr(0,char-dif);
	document.modulo.testo.value = value;
	var left = "0"
	}
	if(obj.keyCode!=13)
		document.modulo.quanti.value=left
}
</script>
<form name=modulo>
<TEXTAREA NAME=testo onKeyUp='conta(event)' onBlur='conta(event)' 
onFocus='conta(event)' rows="5" cols="34" maxlength="5" ></TEXTAREA>
<br>
<input type=text name=quanti> max 250
</form>
con questo ..
if(obj.keyCode!=13)
	document.modulo.quanti.value=left
non incrementa il numero di caratteri quando invio...
perfetto..quindi io tutto contento pensavo di aver risolto..
non č proprio cosě, perchč se inizio con due invii lo script non li conta
ma appena inizio a scrivere sulla terza linea allora mi conta anche gli
invii
secondo voi c'č una soluzionea a questo mio dilemma?
lo scopo e che vorrei far inserire un max di 1000 caratteri compresi di
punteggiatura e spazi., e sarebbe molto carino usare uno script come
questo per far visualizzare quanti ne mancano alla fine...
ma alla fine se non rissolvo.. un bel controllo lato server con php e mi
tolgo questo sasso dal piede
ahha
un saluto 
giuseppe
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 		document.modulo.quanti.value=left
beh, qua stai dicendo: se il tasto premuto non è ascii 13 scrivi il
totale...
se devi contarli:
a) rimuovi l'if
b) devi sempre contare il numero di caratteri; se vuoi escludere \n
potresti usare una semplice regexp; così al volo (non testata) potrebbe
bastare un
var arr=documento.modulo.testo.value.match(/./g);
document.modulo.quanti.value=(arr==null?0:arr.length);
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 tolgo questo sasso dal piede
Ma quello lo devi fare comunque?!?

Grazie Cristiano, ho cercato di seguire alla lettera il tuo consiglio....
function conta()
{
	var lenMax=5
	var strlength=document.modulo.testo.value.length
	left =lenMax - strlength;
	if (left <=-1)
	{
	var dif = strlength - lenMax;
	var value = document.modulo.testo.value.substr(0,strlength-dif);
	document.modulo.testo.value = value;
	var left = 0
	}
	document.modulo.quanti.value=left
	var arr=document.modulo.testo.value.match(/./g);
	document.modulo.quanti.value=(arr==null?0:arr.length);
}
-->
</script>
dimmi tu se ho fatto bene..
il risultato è quello che volevo ora finalmente non mi conta gli accapo
('\n'). 
Noto però un bug in questo.. cio un bug.. un qualcosa che on vorre.. forse
è meglio :)
che penso sipossa risolvere.
Metti per esempio imposto lenMax=5
se gli do due invii il contatore è sempre a zero, ma se poi continuo a 
scrivere lui mi fa scrivere solo 3 caratteri...(mentre il totale dei
caratteri e 5) cioè nel calcolo totate lui conta anche gli invii mi
spiego..?
Grazie ancora...
Giuseppe
grazie ancora..


Ugo ha scritto:


si che lo devo fare comunque....
e spero che il ocntrollo javascript e php concidano
ahah:)


 spiego..?
beh, è una questione di logica ... cioé: la strlength la calcoli come
totale caratteri, basta calcolarla con la regexp come hai fatto sotto.
Quindi diventerebbe:
 	var lenMax=5;
 	var arr=document.modulo.testo.value.match(/./g);
 	var strlength=arr==null?0:arr.length;
        ......
        //e ovviamente alla fine non stai a ricalcolarlo, scrivi
direttamente il risultato (strlength)
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 direttamente il risultato (strlength)
Cristiano.... se hai ancora un pň di pazienza...
spero diessere vicino...
ora la funzione si presenta cosě dopo le ultime tue modifiche...
<script type="text/javascript">
<!--
function conta()
{
	var lenMax=5;
	var arr=document.modulo.testo.value.match(/./g);
	var strlength=arr==null?0:arr.length;
 
	left =lenMax - strlength;
	if (left <=-1)
	{
	var dif = strlength - lenMax;
	var value = document.modulo.testo.value.substr(0,strlength-dif);
	document.modulo.testo.value = value;
	var left = 0
	}
	document.modulo.quanti.value=left
	document.modulo.quanti.value=strlength;
 
}
-->
</script>
su firefox va bene se no fosse per il fatto che se continuo  as crivere
dopo il 5 carattere e sono sulla prima lina ui si ferma ed č tutto ok...
se invece se inizio con due invio e poi continuo a scrivere anche dopo il
5 carattere lui non si ferma ma mi sballa torna tipo a volte a 4 a volte a
3.. (ma che lho fatto random..? ahah)
poi mi sono accorto che tutte queste belle modifiche su explorer.
purtroppo quello piů usato non vanno.. cioč gli invii vengono calcolati..
come mai? non dovrebbe.... leggevo sulla guida...
 ho letto un po sulla guida ma non mi sembra che per quello che mi hai
fatto mettere ci siano delle funzioni non supportate da explorer
grazie ancora...
della pazienza
Giuseppe


 3.. (ma che lho fatto random..? ahah)
no...come prima, usa un po' di logica, tenendo però conto della regexp
sopra e del fatto che quello che chiami "acapo" è costituito in realtà da 2
caratteri (ascii 10+13, in javascript \n\r). spiegazione un po'
semplificata.
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

	left = 0
non serve, dovrai visualizzare quanti sono realmente (e saranno per forza
lenMax), ergo: strlength=lenMax;
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

Ahh cristiano..
hai ragione avevo detto che fungeva ma avevo provato solo con firefox.
mea culpa....
poi se hai ancora ti rimane un po di pazienza...
e mi dici... dove aggiungere ste due righe...
hai birra pagata.. se sei di roma o se ci passi... :)
ti giuro davero che ho provato tutte le combinazioni possibili ma nada...
la funzione è sempre questa...
function conta()
{
	var lenMax=5;
	var arr=document.modulo.testo.value.match(/./g);
	var strlength=arr==null?0:arr.length;
	left =lenMax - strlength;
	if (left <=-1)
	{
	var dif = strlength - lenMax;
	var value = document.modulo.testo.value.substr(0,strlength-dif);
	document.modulo.testo.value = value;
	var left = 0
	}
	document.modulo.quanti.value=value
	document.modulo.quanti.value=strlength;
 
}
e il mio scopo e sempre quello di aggiungere tot caratteri compresi di
spazie puntegiature... :)
come dovrei cambiarla per aggiungere queste due righe.. 
var totAcapo=document.modulo.testo.value.match(/[\n\r]/g).length;
var value = document.modulo.testo.value.substr(0,lenMax+totAcapo); 
vabbe capisco pure che sto a diventa pesante.. sto post
mo sembra un tema... :)
ma sto imparando... e mi scuso.. delle troppe domande.
daldronde capisco pure se ti sei rotto di rispondere...
un saluto
e ancora grazie giuseppe


  var strlength=document.modulo.testo.value.length
var strlength=document.modulo.testo.value.replace(/[\r\n]+/,"").length
   ...skipped!
-- 
    * b *
  *   y   *
*   Piero   *
[ /summum ius summa iniuria/ ] 

 ti giuro davero che ho provato tutte le combinazioni possibili ma nada...
scusa, ma ti ho scritto come modificare "var value" ... cioé: dove adesso
calcoli var value=.... al suo posto devi mettere le 2 righe che ti ho
scritto.
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 scritto.
function conta()
{
var lenMax=5;
var arr=document.modulo.testo.value.match(/./g);
var strlength=arr==null?0:arr.length;
left =lenMax - strlength;
if (left <=-1)
{
var dif = strlength - lenMax;
var totAcapo=document.modulo.testo.value.match(/[\n\r]/g).length;
var value = document.modulo.testo.value.substr(0,lenMax+totAcapo); 
//var value = document.modulo.testo.value.substr(0,strlength-dif);
document.modulo.testo.value = value;
var left = 0
}
document.modulo.quanti.value=value
document.modulo.quanti.value=strlength;
}
infatti cristiano io ho fatto così.. ma non funge.. 
poiche mi continua a scrivere anche dopo il 5 carattere e con explorer mi
conta anche gli invvi poi ogni tanto mi esce per microsecondi "undefined"
sull imput text che conta
ehh grave..? ah:)


 sei..? 
Sono uno schifus milanes ... :-)


 esempio)
Abbasciu a lu Salentu nu bruciamo cu lu reggae...
...e magnamo come li porci :)
(pardon, il mio salentino è inesistente :])
-- 
Nando [?]
Apostolo della Prova

 ...e magnamo come li porci :)
beati voi! :-)


 beati voi! :-)
Ué, io mica so' salentino :)
E poi di cosa ti lamenti: Milano è piena di ristoranti pugliesi!


ahh cristiano di ho distratto troppo con la puglia e roma...
ma no mi hai detto :( perchè sta soluzione non và..
function conta()
{
var lenMax=5;
var arr=document.modulo.testo.value.match(/./g);
var strlength=arr==null?0:arr.length;
left =lenMax - strlength;
if (left <=-1)
{
var dif = strlength - lenMax;
var totAcapo=document.modulo.testo.value.match(/[\n\r]/g).length;
var value = document.modulo.testo.value.substr(0,lenMax+totAcapo);
//var value = document.modulo.testo.value.substr(0,strlength-dif);
document.modulo.testo.value = value;
var left = 0
}
document.modulo.quanti.value=value
document.modulo.quanti.value=strlength;
}
che dovrei correggere...


 var left = 0
non abbiamo detto che left=0 non serve a niente, e che va settato
strlength?
 strlength=lenMax;


 pesanti". 
stavo appunto chiedendo chi fossero...mi documento, bel testo!
-- 
"Voi abili a tenere sempre un piede qua e uno lą
 avrete un avvenire certo in questo mondo qua
 perņ la dignitą


 dai una voce quando passi :-)
sarà fatto! (quest'anno non penso, ahimé)
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

 non 
l'hai letto vero?
Vediamo se leggi questo. ;-)
<html>
<head>
<script type="text/javascript">
function c_down(obj){
max=document.foo.qq.value;
//max=250; usa questo se vuoi fissare la quantità
str=document.foo.tt.value.replace(/[\r\n]+/g,"").length;
char=document.foo.tt.value.length;
left=max-str;
if (left <= -1){
dif=str-max;
value=document.foo.tt.value.substr(0,char-dif);
document.foo.tt.value=value;
left=0;
}
obj.keyCode!=13;
document.foo.how.value=left;
}
</script>
</head>
<body>
<h4><u>digita il n. dei caratteri prima di scrivere!</u></h4>
<form name="foo">
<textarea name="tt" onkeyup="c_down(event)" onblur="c_down(event)"
onfocus="c_down(event)" rows="6" cols="43"></textarea><br />
caratteri n. <INPUT type="text" size="5" value="" name="qq" />
&nbsp;countdown <INPUT type="text" size="5" value="" name="how" />
&nbsp;<input type="reset" value="cancella" name="" />
</form>
</body>
</html>
-- 
    * b *
  *   y   *
*   Piero   *
[ /beati monocoli in terra caecorum/ ] 

  strlength=lenMax;
Cristiano... sono daccoro con te...
solo che mi sa che li setto male ste variabili.
io ho fatto così.. ma non và
function conta()
{
var lenMax=5;
var arr=document.modulo.testo.value.match(/[\n\r]/g);
var strlength=arr==null?0:arr.length;
left =lenMax - strlength;
strlength=lenMax;
if (left <=-1)
{
var dif = strlength - lenMax;
var totAcapo=document.modulo.testo.value.match(/[\n\r]/g).length;
var value = document.modulo.testo.value.substr(0,lenMax+totAcapo);
//var value = document.modulo.testo.value.substr(0,strlength-dif);
document.modulo.testo.value = value;
//var left = 0
}
document.modulo.quanti.value=value
document.modulo.quanti.value=strlength;
}
devo butta la spugna... non è proprio per me javascript...?
butto il pc..?
che devo fà...
mannaggia li pescetti :)
ahha
ciaooo


 devo butta la spugna... non è proprio per me javascript...?
scusami, senza offesa, ma sembra non essere per te neanche copiare pari
pari...
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 culturale che ormai iniziavo a giudicare proprio come in questa canzone.
Io non conosco il Salento ma ho sentito che si č "contaminato" negli ultimi
anni. Onore a chi non vuole rassegnarsi.
