Fonction replace pour émuler caps lock

[Résolu]
Signaler
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
-
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
-
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

Messages postés
49
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
3 février 2008

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 ?
Messages postés
49
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
3 février 2008

Verifie quand meme que si on te passe la chaine xxx&x&xx, ca donne bien xxx1x1xx et non pas xxx1x&xx
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
Je vais tester tout cela.

Merci beaucoup :-)
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
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
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
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?
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
correction
if (element.options[i].text.toLowerCase().match(chaine)) {
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
il manque vraiment une fonction edit enfin bref c'est une correction mais ça fonctionne toujours pas