[JS] Sauvegarder position curseur dans textarea

Sauvegarder position curseur dans textarea [JS] - HTML/CSS - Programmation

Marsh Posté le 21-02-2007 à 10:36:39    

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 :
  1. function dverifTextArea(zone)
  2. {
  3.   //on ne fait rien si on touche les fleches
  4.   if (event.keyCode >= 37 && event.keyCode <= 40)
  5.     return;
  6.    
  7.   var ValeurInitiale = document.getElementById(zone).value;
  8.   var TailleInitiale = ValeurInitiale.length;
  9.   var nblig = parseInt(document.getElementById(zone).rows);
  10.   var nbcol = parseInt(document.getElementById(zone).cols);
  11.   var taillemax = nbcol * nblig;
  12.  
  13.   var taillereelle = 0;
  14.   var tailleligne = 0;
  15.  
  16.   var nbLigneApres = 1;       
  17.   var valeurApres = "";
  18.  
  19.   var i=0;
  20.  
  21.   while (nbLigneApres <= nblig && i < ValeurInitiale.length && taillereelle <= taillemax)
  22.   {
  23.     //si caractere "normal"
  24.     if (ValeurInitiale.charCodeAt(i) != '13' && ValeurInitiale.charCodeAt(i) != '10')
  25.     {
  26.       taillereelle++;
  27.       tailleligne++;
  28.       //si on depasse la taille max de ligne
  29.       if (tailleligne > nbcol )
  30.       {
  31.         tailleligne = 0;
  32.         valeurApres += String.fromCharCode('13'); + String.fromCharCode('10');
  33.         nbLigneApres += 1;
  34.       }
  35.       valeurApres += String.fromCharCode(ValeurInitiale.charCodeAt(i));
  36.     }
  37.     //si on rencontre un entré
  38.     if (ValeurInitiale.charCodeAt(i) == '13' && ValeurInitiale.charCodeAt(i+1) == '10')
  39.     {
  40.       //si on dépasse le nombre de ligne max
  41.       if (nbLigneApres + 1 <= nblig)
  42.       {
  43.         nbLigneApres += 1;
  44.         tailleligne = 0;
  45.         valeurApres += String.fromCharCode(ValeurInitiale.charCodeAt(i)) + String.fromCharCode(ValeurInitiale.charCodeAt(i+1));
  46.         i++;
  47.       }
  48.     }   
  49.  
  50.   i++;
  51.   }
  52.   document.getElementById(zone).value =  valeurApres;
  53. }


 
avec le lancement sur le onkeyup :

Code :
  1. soft 
  2. <br>
  3. <textarea style="OVERFLOW: hidden" wrap="soft" cols="35" rows="4" id="soft"    onkeyup="javascript:dverifTextArea('soft');">
  4. </textarea>
  5. <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...

Reply

Marsh Posté le 21-02-2007 à 10:36:39   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed