Problème avec REGEX sous IE

Résolu
death83 Messages postés 10 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 septembre 2006 - 21 sept. 2006 à 22:44
death83 Messages postés 10 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 septembre 2006 - 25 sept. 2006 à 22:58
Salut a tous,

je suis entrain de faire un petit script qui fonctionne bien sauf sur IE.

J'ai une fonction qui permet la génération automatique d'un texte à partir de 2 input.

Un petit exemple concret pour comprendre:

input 1: Fonction
input 2: Nom

J'obtient un code généré:

Fonction : Nom

jusque la ca va

si on entre ensuite

input 1: Fonction2
input 2: Nom2

j'obtient alors:

Fonction : Nom
Fonction2 : Nom2

Le problème viens lorsque la meme fonction reviens une seconde fois par exemple:

input 1: Fonction
input 2: Nom3

Sous FF, Opéra et Netscape j'obtient: (ce que je veut)

Fonction : Nom / Nom3
Fonction2: Nom2

mais sous IE j'ai ca:

Fonction : Nom
/ Nom3
Fonction2: Nom2

Voilà le code concerné:

function ajouteintextarea(idtextarea,element1,element2)
{
    //On récupert le text du textarea
    var text=document.getElementById(idtextarea).value;
    //On ahoute le nouveau perso
    var fonction=document.getElementById(element1).value;
    var perso=document.getElementById(element2).value;
   
    reg=new RegExp(fonction+" :","gi"); //Pour mozilla firefox
    test=text.match(reg);
    alert(test);
    if(test!=null)
    {
        alert('pwet');
        reg=new RegExp(test+" (.*)","gi");
        var textainser=text.replace(reg,test+" $1 / "+perso);
        document.getElementById(idtextarea).value=textainser;
    }
    else
    {
        if(text=='')
        {       
            var textainser=fonction+" : "+perso;
            document.getElementById(idtextarea).value=textainser;
        }
        else
        {
            var textainser=text+"\n"+fonction+" : "+perso;
            document.getElementById(idtextarea).value=textainser;
        }
    }
   
}

ou element1 correspond a input 1 et element 2 a input2.

Savez vous comment je pourrais corriger ce problème sous IE? Apparement c'est à cause du \n, mais si je l'enlève ca ne marche plus.

6 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
25 sept. 2006 à 12:57
C'est vraiment plus simple avec les RegExp

Tu ajoutes...
  var reg = new RegExp("[\r]","gi");
  text =text.replace( regexp, '');
Avant...
  reg =new RegExp(fonction+" :","gi"); //Pour mozilla firefox
  test=text.match(reg);
dans ta source et cela doit être bon...







;0)
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
22 sept. 2006 à 15:26
B
onjour...

Je réponds indirectement à ton problème en te donnant le lien d'une source déposée il y a peu sur ce site
CURSEUR dans TEXTAREA
Je sais elle est de moi mais bon, il n'empêche que tu devrais y trouver ta vie
;0)
0
death83 Messages postés 10 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 septembre 2006
22 sept. 2006 à 16:22
Merci pour ta réponse, mais je trouve que c'est un peu l'artillerie lourde toute ces fonctions pour juste un petit saut à la ligne non voulu sous IE.

Tu crois que c'est vraiment du à un saut du curseur? C'est bizarre quand même, il viendrait de la regex?
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
25 sept. 2006 à 12:32
B
onjour...

les RegExp ne sont nullement en cause mais plutôt la façon différente qu'on les navigateurs de gérer les retours chariot dans les TEXTAREA...

donc après essais et tests sur FireFox et IE  ce qui suit devrait te convenir...

function Add(idtextarea,element1,element2){
  var szTxt = "";
  var Obj = document.getElementById(idtextarea);
  //On récup. le text du textarea
  var szTxt = Obj.value;
  //On ajoute le nouveau perso
  var fonction=document.getElementById(element1).value;
  var perso=document.getElementById(element2).value;

  reg = new RegExp( fonction+" :","gi");
  Test = szTxt.match( reg);
  //-- Existe Déjà --//
  if( Test!=null){
    var Pos;
    //-- Récup chaque Ligne --//
    var szTmp = new Array();
    szTmp = szTxt.split('\n');
    //-- Formattage des Lignes --//
    for( i =0 ; i < szTmp.length; i++){
      //-- Suppression des retour chariot --//
      Pos = szTmp[i].indexOf('\r');
      if( Pos > -1)
        szTmp[i]=szTmp[i].substring( 0, Pos);
      //-- Test Si ligne concernée --//
      if( szTmp[i].match( reg) !=null)
        szTmp[i] += " / "+perso; // On ajoute
    }
    //-- Rétabli le texte en sortie --//
    szTxt = "";
    for( i =0 ; i < szTmp.length-1; i++)
      szTxt += szTmp[i] +'\n';
    //-- Dernière sans saut de ligne --//
    szTxt += szTmp[i];
  }
  else{
    if( szTxt =='')
      szTxt = fonction+" : "+perso;
    else
     szTxt += "\n" + fonction+" : "+perso;
  }
  //-- Ecriture dans Textarea --//
  Obj.value = szTxt;
}

Voila je pense qu'il y à moyen de faire plus simple avec les RegExp en remplaçant tous les retours chariot d'une traite dans le texte récupéré et en appliquant ton code Mais je te laisse joué...

;0)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
death83 Messages postés 10 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 septembre 2006
25 sept. 2006 à 15:53
Merci,

je vais essayer ca se soir et je vous tient au courant ;).
0
death83 Messages postés 10 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 25 septembre 2006
25 sept. 2006 à 22:58
C'est bon ca marche ^^.

Merci beaucoup, et oui je suis d'accord avec Petoleteam, c'est beaucoup plus simple avec les RegEx.

Encore merci ^^.
0
Rejoignez-nous