Bonjour,
J'ai fait pas mal de recherche mais je n'ai pas trouvé de réponses satisfaisantes.
J'ai les contraintes suivantes :
- le script doit fonctionner au minimum sous IE
- la zone textarea fait 4 lignes sur 35 de long et le texte rentré par l'utilisateur est ensuite coupé en 4 lignes de 35 pour etre stocké dans une base DB2
- le copier coller doit fonctionner, si c'est trop long, on coupe à la sauvage
j'ai pondu un bout de code :
Code :
- function dverifTextArea(zone)
- {
- //on ne fait rien si on touche les fleches
- if (event.keyCode >= 37 && event.keyCode <= 40)
- return;
-
- var ValeurInitiale = document.getElementById(zone).value;
- var TailleInitiale = ValeurInitiale.length;
- var nblig = parseInt(document.getElementById(zone).rows);
- var nbcol = parseInt(document.getElementById(zone).cols);
- var taillemax = nbcol * nblig;
-
- var taillereelle = 0;
- var tailleligne = 0;
-
- var nbLigneApres = 1;
- var valeurApres = "";
-
- var i=0;
-
- while (nbLigneApres <= nblig && i < ValeurInitiale.length && taillereelle <= taillemax)
- {
- //si caractere "normal"
- if (ValeurInitiale.charCodeAt(i) != '13' && ValeurInitiale.charCodeAt(i) != '10')
- {
- taillereelle++;
- tailleligne++;
- //si on depasse la taille max de ligne
- if (tailleligne > nbcol )
- {
- tailleligne = 0;
- valeurApres += String.fromCharCode('13'); + String.fromCharCode('10');
- nbLigneApres += 1;
- }
- valeurApres += String.fromCharCode(ValeurInitiale.charCodeAt(i));
- }
- //si on rencontre un entré
- if (ValeurInitiale.charCodeAt(i) == '13' && ValeurInitiale.charCodeAt(i+1) == '10')
- {
- //si on dépasse le nombre de ligne max
- if (nbLigneApres + 1 <= nblig)
- {
- nbLigneApres += 1;
- tailleligne = 0;
- valeurApres += String.fromCharCode(ValeurInitiale.charCodeAt(i)) + String.fromCharCode(ValeurInitiale.charCodeAt(i+1));
- i++;
- }
- }
-
- i++;
- }
- document.getElementById(zone).value = valeurApres;
- }
|
avec le lancement sur le onkeyup :
Code :
- soft
- <br>
- <textarea style="OVERFLOW: hidden" wrap="soft" cols="35" rows="4" id="soft" onkeyup="javascript:dverifTextArea('soft');">
- </textarea>
- <br>
|
Le problème c'est que le curseur se retouve systématiquement à la fin de ma zone de texte, j'aimerais qu'il reste à sa position initiale.
je pensais sauvegarder cette position, faire ma fonction et le remettre ensuite.
J'ai lu pas mal de sujet, avec les createRange(), caretPos, ... mais je n'arrive pas à les mettre en oeuvre.
Peut-être aussi que la démarche de base, vérifier le texte et le stocker dans une variable de coté puis remplacer ce texte, n'est pas la bonne.
Si vous avez des idées...