Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 18/03/2010, 12h34   #1
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
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
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 12h50   #2
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
pour le moment j'ai écris ça :

Code :
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.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 13h21   #3
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

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

Code :
event.CharCode = nouvelle_valeur;
ça semble ne pas marcher :s
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 13h36   #4
Futur Membre du Club
 
Femme
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 18
Points : 18
Bonjour,

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

Code :
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;
}
Brünh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 13h42   #5
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
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
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 13h54   #6
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
va savoir pourquoi ça fonctionne quand meme en remplaçant la valeur ...
je repars sur ton idée, merci
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 14h04   #7
Futur Membre du Club
 
Femme
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 18
Points : 18
Code :
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.
Brünh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 14h10   #8
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
version finale du code :

Code :
<input type="text" name="ville" id="ville" onKeyPress="return no_accent(this.value, this.id, event);"/>
Code :
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 !

Dernière modification par thor76160 ; 18/03/2010 à 14h23.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 16h35   #9
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
et rebelotte, me revoila de retour !!
il s'avère que ce code ne fonctionne malheureusement pas sous ie6 !!
quel navigateur de ***** (biiip)
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 16h42   #10
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
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
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 16h50   #11
Futur Membre du Club
 
Femme
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 18
Points : 18
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...
Brünh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 16h57   #12
Membre habitué
 
Inscription : décembre 2007
Messages : 572
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 572
Points : 111
Points : 111
apparemment c'est le event qui ne passe pas dans les parametre de la fonction
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 17h05   #13
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2007
Messages : 9 037
Points : 14 651
Points : 14 651
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+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h34.


 
 
 
 
Partenaires

Hébergement Web