Page 1 sur 1

Textarea compter

Posté : 28 janv. 2015, 18:15
par [Compte supprime]
Bonjour,

J'ai trouvé ce très bon code sur un forum :

[javascript]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="language" content="fr" />
<title>Textaea dynamique</title>
<script type="text/javascript">
function dymaniqueText(id)
{
var text = document.getElementById(id);

if(text.value.match(/[\r\n]/g))
{
var nbRetourChariot = text.value.match(/[\r\n]/g).length;
}
else
{
var nbRetourChariot = 0;
}

var nbCaractere = text.value.length - nbRetourChariot;

nbRetourChariot += Math.ceil(nbCaractere /(text.cols))

text.rows=nbRetourChariot;

document.getElementById('apercu').innerHTML = nbRetourChariot+' - '+nbCaractere;
}
</script>
</head>
<body>

<div id="apercu"></div>
<textarea name="text" id="text" cols="30" onkeyup="dymaniqueText('text');" onkeydown="dymaniqueText('text');"></textarea>


</body>
</html>[/javascript]

Je tente depuis quelques heures de l'adapter mais je ne sais pas si une commande existe pour m'aider ...
En fait, ce script permet d'afficher le nombre de caractères dans le textarea et le nombre de ligne grâce à la détection des retour chariot.
Avec ces 2 infos, je me demandais si on ne pouvait pas simplement calculer le nombre de caractères par ligne ?

Merci ! :)

Re: Textarea compter

Posté : 28 janv. 2015, 19:12
par tof73
[javascript]var nbmoyen = 0;
if(nbRetourChariot){
nbmoyen = nbCaractere / nbRetourChariot;
}
document.getElementById('apercu').innerHTML = nbRetourChariot+' - '+nbCaractere+' - '+nbmoyen;
[/javascript]

reste à avoir si c'est bien utile.

Re: Textarea compter

Posté : 28 janv. 2015, 20:42
par [Compte supprime]
Pour commencer, merci ! :D

ça ne résoud pas mon problème car ça fait une moyenne de mots par ligne ...
Si ma 1ère ligne fait 25 et la 2ème 5, il va m'afficher 15 ! Alors logique car il n'affiche qu'une entrée. Il faudrait qu'il affiche un nouveau nbmoyen pour chaque nouvelle ligne.

Pour la compréhension, voici mon post initial sur un autre forum :
Bonjour,
Posté initialement dans la partie PHP, je le poste ici car il semblerait que seule l'ami JS puisse m'aider ...

Dans un formulaire, j'utilise <textarea> et pour les besoins d'une édition en PDF, j'ai besoin de limiter la taille de caractère par ligne.

Dans le PDF, ces données sont reprises dans un tableau avec nl2br donc il n'y a pas de souci à avoir 30 lignes de 20 caractères mais ces lignes ne doivent pas dépasser 20 caractères pour ne pas modifier la mise en page.

J'ai vu l'attribut maxlength mais il concerne tout le textarea ...
Merci pour votre aide
J'ai parcouru le net entier sur tous les forums spécialisés car la question revient souvent sans réel solution ... Je suis finalement tombé sur le script que j'ai copié sur le 1er post.
Je me suis dis qu'il était sûrement possible de calculer les lignes à partir de ce script. Et j'ai modifié mon idée de départ vu la difficulté ...
Maintenant, ce que je souhaite, c'est en gros : "SI une des lignes dépassent xx caractères -> Afficher un message ou un fond rouge pour prévenir que l'utilisateur n'a pas sauter une ligne manuellement ...

MAIS au final, en testant ce que je viens de dire, le script saute une ligne quand il arrive au bout de la zone .... SAUF que si on agrandit la zone, la ligne s'agrandit ... Donc en gros, ça ne fonctionnera pas .... :-/. Il faudrait obliger l'utilisateur à faire un "entrée" en arrivant au bout de la zone ....

Re: Textarea compter

Posté : 29 janv. 2015, 15:47
par [Compte supprime]
Au final, est-ce qu'il est possible de créer une nouvelle variable par nouvelle ligne ?
Si l'une d'entre elles dépassent xx caractères alors affichage d'un message en rouge.

Re: Textarea compter

Posté : 30 janv. 2015, 00:19
par [Compte supprime]
La solution :

[javascript]function dymaniqueText(id){
var text = document.getElementById(id);
if(text.value.match(/[\r\n]/g)){
var nbRetourChariot = text.value.match(/[\r\n]/g).length;
}
else{
var nbRetourChariot = 0;
}
var nbCaractere = text.value.length - nbRetourChariot; ;
nbRetourChariot += Math.ceil(nbCaractere /(text.cols));
text.rows=nbRetourChariot;
document.getElementById('apercu').innerHTML = nbRetourChariot+' - '+nbCaractere;


var blabla = text.value;
var tab = blabla.split('\n');
document.getElementById('erreur').innerHTML = "";
for (var i=0; i<tab.length; i++) {
if (tab.length > 66) {
document.getElementById('erreur').innerHTML = "erreur";
}
}
}[/javascript]