serik Posté(e) le 15 octobre 2010 Partager Posté(e) le 15 octobre 2010 Salut, je cherche à "attraper" les caractères tapés dans un champ texte. Je n'ai pas de problèmes pour les caractères a-z,A-Z, mais lorsqu'il s'agit d'un caractère accentué (ô, û, ...) je n'attrape aucun évènement (ni à la frappe de l'accent, ni à celle de la lettre). D'une manière générale, comment faire pour rendre compatible keypress avec tous les caractères unicode/utf8? Merci par avance! Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 15 octobre 2010 Partager Posté(e) le 15 octobre 2010 Salut, je cherche à "attraper" les caractères tapés dans un champ texte. Je n'ai pas de problèmes pour les caractères a-z,A-Z, mais lorsqu'il s'agit d'un caractère accentué (ô, û, ...) je n'attrape aucun évènement (ni à la frappe de l'accent, ni à celle de la lettre). D'une manière générale, comment faire pour rendre compatible keypress avec tous les caractères unicode/utf8? Merci par avance! Pour une page Web avec un input text, il faut utiliser une des fonctions JavaScript suivantes: escape() encodeURI() encodeURIComponent() Une petite explication ici. Et de l'autre côté en PHP, tu utilise la fonction urldecode() Ou alors précise un peu plus: Qu'est ce que tu entends par champ texte? Il se situe où? ..... Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 16 octobre 2010 Auteur Partager Posté(e) le 16 octobre 2010 Merci mais je ne pense pas que j'ai été compris! Il s'agit d'un problème purement javascript! Aucun rapport avec Php! Avec du code, ce sera peut-être plus compréhensible (code simplifié): function init(){ var leinput = document.getElementById("leinput"); leinput.onkeypress = touche; } function touche(evenement){ var evenement = window.event || evenement; alert("Touche (keycode) "+evenement.keyCode+" (charcode) "+evenement.charCode); } Bien sûr, la fonction init() est attaché à onload de body. L'alert me renvoit bien les touches non accentuées, mais rien ne se passe pour les caractères accentués. Et j'ai besoin d'avoir un retour lorsqu'un caractère accentué est tapé... Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 16 octobre 2010 Auteur Partager Posté(e) le 16 octobre 2010 Merci mais je ne pense pas que j'ai été compris! Il s'agit d'un problème purement javascript! Aucun rapport avec Php! Avec du code, ce sera peut-être plus compréhensible (code simplifié): function init(){ var leinput = document.getElementById("leinput"); leinput.onkeypress = touche; } function touche(evenement){ var evenement = window.event || evenement; alert("Touche (keycode) "+evenement.keyCode+" (charcode) "+evenement.charCode); } Bien sûr, la fonction init() est attaché à onload de body. L'alert me renvoit bien les touches non accentuées, mais rien ne se passe pour les caractères accentués. Et j'ai besoin d'avoir un retour lorsqu'un caractère accentué est tapé... Après recherches, ce ne sont que les caractères avec une "dead key" : accent circonflexe, tréma, ... Il n'y a aucun appel à onkeydown / onkeypress. Seul onkeyup est appelé lors du relâchement de la lettre, mais c'est le code de la lettre qui est contenu dans l'évènement. Y a-t-il un moyen d'attraper les dead key? Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 16 octobre 2010 Auteur Partager Posté(e) le 16 octobre 2010 Bon, j'ai fini par trouver... pas vraiment ce que j'attendais! Bug datant du 3 septembre 2006 https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/58693 Trouvable là : https://bugzilla.mozilla.org/show_bug.cgi?id=308820 ou encore là : https://bugzilla.mozilla.org/show_bug.cgi?id=447757 Il semblerait que seul Firefox/Linux soit affecté. J'ai testé mon code sous Konqueror, j'ai bien 1 évènement pour l'accent et un pour la lettre. Je passe en statut insolvable ;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 16 octobre 2010 Auteur Partager Posté(e) le 16 octobre 2010 2h du mat... j'ai trouvé une solution qui, faute de mieux, me convient. En attachant une fonction d'une ligne (sic!) à onkeyup ça passe (en fait on voit le caractère tapé avant la transformation, mais on va faire avec). function init(){ var leinput = document.getElementById("leinput"); leinput.onkeyup = touche; romaji.value = ""; } function touche(evenement){ evenement.target.value = transformer(evenement.target.value); } 3h pour trouver une ligne de code, qui dit mieux? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.