Fonction replace pour émuler caps lock

Résolu
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 - 31 janv. 2008 à 10:20
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 - 31 janv. 2008 à 16:38
Bonjour a tous,

Mon probleme est a peu près le meme que celui de ce sujet
http://www.javascriptfr.com/infomsg_SAVOIR-SI-TOUCHE-MAJ-EST-ACTIVE_685110.aspx

Je voudrais recuperer les touches saisie par un utilisateur quand il prend le focus sur un select donc ça c'est fait (le but sera d'aider l'utilisateur à retrouver le groupe desiré)

<select id = "group" name="group" onFocus="find_group ('group')">

je recupere bien les touches saisie via cette fonction

function find_group (id) {

    document.getElementById(id).onkeypress = function(event) {// 1er onkeydown puis onkeypress et en dernier onkeyup, le pavé numérique ne fonctionne pas avec onkeydown
            //On vérifie le navigateur
        if(navigator.appName === "Microsoft Explorer")
        {
            //On envoie un message avec la touche appuiée pour Internet Explorer
            var char = event.keyCode;
        }
        else
        {
            //On envoie un message avec la touche appuiée pour Netscape/firefox
            var char = event.which;
        }
        var character = String.fromCharCode(char).toLowerCase();
        alert (character);
    }
}

J'arrive à recuperer les numero quand maj est active aussi mais quand caps lock est actif je recupere le &, le é... et non le numero donc je voulais utiliser la fonction replace() de javascript et voila ma question est ce que je suis obligée de traiter les caractere un a un exemple :

if (character == "&")
    character = 1;

ou alors il ya une maniere plus rapide?

Merci d'avance

7 réponses

helorem Messages postés 49 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2008
31 janv. 2008 à 10:38
Zalut maelob,

Voila une focntion qui existe en PHP, je te l'ai recodé :

function strtr( str, depuis, vers)
{
    if (depuis.length == vers.length)
    {
        for (i = 0; i < depuis.length; i++)
           str.replace(depuis.substr(i, 1), vers.substr(i, 1));
       return (str);
    }
    return ("");
}

Et voila comment on l'utilise :
ta_chaine = strtr(ta_chaine, '&é"\'(-è_çà', '1234567890');

Ca te va ?
3
helorem Messages postés 49 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 3 février 2008
31 janv. 2008 à 10:39
Verifie quand meme que si on te passe la chaine xxx&x&xx, ca donne bien xxx1x1xx et non pas xxx1x&xx
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
31 janv. 2008 à 10:47
Je vais tester tout cela.

Merci beaucoup :-)
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
31 janv. 2008 à 13:49
Re a defaut d'avoir reussis a utiliser replace j'ai modifier ta fonction comme ceci

function change_char(char) {
    var depuis = new Array("&", "é", '"', "'", "(", "-", "è", "_", "ç", "à");
    var vers = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
   
    for (i = 0; i < depuis.length; i++) {
        if (depuis[i] == char) {
            char = vers[i];
        }
    }
    return (char);
}

La fonction a le comportement que j'attendais c'est donc parfait.

Merci beaucoup
0

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

Posez votre question
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
31 janv. 2008 à 16:32
je continue ici je sais pas si c'est bien car ça concerne pas la même chose mais le meme bout de code quand meme.

Maintenant le probleme est avec les expressions regulieres...

J'ai bien recuperé la chaine entré par l'utilisateur et fait les traitements dessus. mais maintenant il faudrait que le texte correspondant soit selectionné. ça je sais faire mais pas avec les regex. Deja voila la boucle que j'ai faite.

        var conteneur = document.getElementById('pict');
        if (chaine.length != 0) {

            for (i=0; i<element.options.length; i++) {
                if (element.options[i].text.toLowerCase.match(chaine)) {
                    element.selectedIndex = element.options[i];
                }
            }
         }
et ça fonctionne pas ce qui parait logique car une regex est de la forme /chaine/ mais je fait ça ça marche pas non plus :'-(

Une idée, svp?
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
31 janv. 2008 à 16:37
correction
if (element.options[i].text.toLowerCase().match(chaine)) {
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
31 janv. 2008 à 16:38
il manque vraiment une fonction edit enfin bref c'est une correction mais ça fonctionne toujours pas
0
Rejoignez-nous