IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

comment supprimer les accents avec un onKeyPress


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut comment supprimer les accents avec un onKeyPress
    bonjour, je cherche à filtrer la saisie dans un input de type text.
    lorsque je saisi un caractère, s'il s'agit d'une lettre avec un accent, celle-ci est remplacée par son équivalent sans accent.
    je coince à mort, qui aurait une fonction semblable a celle que je cherche ?

    merci pour votre coup de main

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    pour le moment j'ai écris ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <script type="text/javascript">
    function no_accent(event)
    {
    	var valeurs_interdites = new Array(192, 193, 194, 195, 196, 197, 224, 225, 226, 227, 228, 229, 210, 211, 212, 213, 214, 216, 242, 243, 244, 245, 246, 248, 200, 201, 202, 203, 232, 233, 234, 235, 199, 231, 204, 205, 206, 207, 236, 237, 238, 239, 217, 218, 219, 220, 249, 250, 251, 252, 255, 209, 241);
    	var valeurs_de_remplacment = new Array(97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110);
    	var nb = valeurs_de_remplacment.length;
    	var trouve = false;
    	var i = 0;
    	var nouvelle_valeur = "";
    	while((i < nb) && (!trouve))
    	{
    		if(event.charCode == valeurs_interdites[i])
    		{
    			trouve = true;
    		}
    		else
    		{
    			i++;
    		}
    	}
     
    	if(trouve)
    	{
    		nouvelle_valeur = valeurs_de_remplacment[i];
    	}
     
    	event.returnValue = true;
    }
    </script>
    maintenant j'aimerais retourner la "nouvelle_valeur", dans les cas où ce serait une lettre accentuée.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    je bloque carément :s
    aucune de mes recherches sur google ne m'a aidé >_<
    j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event.CharCode = nouvelle_valeur;
    ça semble ne pas marcher :s

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    J'ai repris ta fonction et l'ai un peu modifiée, normalement ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function no_accent(event)
    {
    	var valeurs_interdites = new Array(192, 193, 194, 195, 196, 197, 224, 225, 226, 227, 228, 229, 210, 211, 212, 213, 214, 216, 242, 243, 244, 245, 246, 248, 200, 201, 202, 203, 232, 233, 234, 235, 199, 231, 204, 205, 206, 207, 236, 237, 238, 239, 217, 218, 219, 220, 249, 250, 251, 252, 255, 209, 241);
    	var valeurs_de_remplacment = new Array(97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110);
    	var nb = valeurs_de_remplacment.length;
    	var nouveau_mot = "";
    	var trouve = false;
    	for(var j=0; j<event.length; j++){
    		for(var i =0; i<nb ; i++) 
    		{
    			if(valeurs_interdites[i] == event.charCodeAt(j))
    			{
    				nouveau_mot += String.fromCharCode(valeurs_de_remplacment[i]);
    				trouve = true;
    			}
    		}
     
    		if(!trouve) {
    			nouveau_mot += event.charAt(j);
    		}
     
    		trouve = false;
    	}
     
    	//event.returnValue = true;
    	return nouveau_mot;
    }

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    merci mais non.
    je dois vraiment retourner la valeur !
    un script d'autocomplete jquery s'execute après ca, donc je ne peux pas modifier le mot en lui meme, mais modifier la lettre saisi. enfin je m'explique mal mais je pense que tu auras compris.
    je dois réussir avec ma méthode, mais je n'arrive pas à la finir :s

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    va savoir pourquoi ça fonctionne quand meme en remplaçant la valeur ...
    je repars sur ton idée, merci

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function no_accent()
    {
    	var mot_saisi = document.getElementById("inputId").value;
    	var lettre_a_remplacer = mot_saisi.charCodeAt(mot_saisi.length-1);// prend la derniere lettre
     
    	var valeurs_interdites = new Array(192, 193, 194, 195, 196, 197, 224, 225, 226, 227, 228, 229, 210, 211, 212, 213, 214, 216, 242, 243, 244, 245, 246, 248, 200, 201, 202, 203, 232, 233, 234, 235, 199, 231, 204, 205, 206, 207, 236, 237, 238, 239, 217, 218, 219, 220, 249, 250, 251, 252, 255, 209, 241);
    	var valeurs_de_remplacment = new Array(97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110);
    	var nb = valeurs_de_remplacment.length;
    	var trouve = false;
     
    	for(var i =0; i<nb ; i++) 
    	{
    		if(valeurs_interdites[i] == lettre_a_remplacer)
    		{
    			lettre_a_remplacer = valeurs_de_remplacment[i];
    			trouve = true;
    		}
    	}
    	var nouveau_mot = mot_saisi.substring(0, mot_saisi.length-1) + lettre_a_remplacer;
     
    	return nouveau_mot;
    }
    La ça te retourne le code du mot si c'est bien ça que tu veux.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    version finale du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="ville" id="ville" onKeyPress="return no_accent(this.value, this.id, event);"/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <script type="text/javascript">
    function no_accent(ma_chaine, id_element, event)
    {
    	// on définit les lettres acceptées et celles qui sont refusées
    	var valeurs_interdites = new Array(192, 193, 194, 195, 196, 197, 224, 225, 226, 227, 228, 229, 210, 211, 212, 213, 214, 216, 242, 243, 244, 245, 246, 248, 200, 201, 202, 203, 232, 233, 234, 235, 199, 231, 204, 205, 206, 207, 236, 237, 238, 239, 217, 218, 219, 220, 249, 250, 251, 252, 255, 209, 241);
    	var valeurs_de_remplacement = new Array(97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110);
    	var nb = valeurs_de_remplacement.length;
     
    	// on vérifie que la valeur saisi est autorisée
    	var trouve = false;
    	var i = 0;
    	while((i < nb) && (!trouve))
    	{
    		if(event.charCode == valeurs_interdites[i])
    		{
    			trouve = true;
    		}
    		else
    		{
    			i++;
    		}
    	}
     
    	// si la valeur saisie est accentuée, on la modifie + retour
    	// RAPPEL si ce n'est pas un accent, on retourne simplement la valeur EXEMPLE : la touche effacer !
    	if(trouve)
    	{
    		document.getElementById(id_element).value = ma_chaine + String.fromCharCode(valeurs_de_remplacement[i]);
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    }
    </script>
    et ça marche

    un grand merci pour le coup de main ! ^^

    petit rappel : j'ai géré le cas où on devrait utiliser la touche effacer !

  9. #9
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    et rebelotte, me revoila de retour !!
    il s'avère que ce code ne fonctionne malheureusement pas sous ie6 !!
    quel navigateur de ***** (biiip)

  10. #10
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par thor76160 Voir le message
    et rebelotte, me revoila de retour !!
    il s'avère que ce code ne fonctionne malheureusement pas sous ie6 !!
    quel navigateur de ***** (biiip)
    même chose sous ie8 et opéra, je viens de les installer

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Je ne sais pas trop ce qu'il ne marche pas sous IE,
    mais je sais que le code que je t'ai filé marche sous IE6.

    Je ne comprend pas trop l'intérêt de ta variable event...
    Sachant que quand j'ai testé ta fonction alert(event.charCode); est undefined...

  12. #12
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Points : 222
    Points
    222
    Par défaut
    apparemment c'est le event qui ne passe pas dans les parametre de la fonction

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par thor76160 Voir le message
    apparemment c'est le event qui ne passe pas dans les parametre de la fonction
    je n'ai pas regardé en détail, mais les évènements sont gérés différemment suivant les nav.
    Quelques exemples ici ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

Discussions similaires

  1. [AC-2003] Comment supprimer les espaces avec mid, left, right
    Par edonis dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/10/2011, 19h05
  2. Supprimer les accents avec Linq
    Par gazier20 dans le forum Linq
    Réponses: 8
    Dernier message: 02/12/2009, 17h43
  3. Réponses: 6
    Dernier message: 12/02/2008, 20h02
  4. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo