Onkeypress = function sous IE ne fonctionne pas, une autre solution?

Résolu
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 - 14 févr. 2008 à 10:10
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 - 15 févr. 2008 à 13:11
Bonjour à tous,

comme expliquer dans ce sujet : http://www.javascriptfr.com/infomsg_FONCTION-REPLACE-EMULER-CAPS-LOCK_1069004.aspx#7

Je suis en train de mettre en place de l'aide à la saisie pour un utilisateur dans un formulaire. Ici c'est un select avec un nombre assez impressionnant d'options donc j'ai créer une fonction javascript qui aide l'utilisateur à retrouvé l'option qu'il desire en donnant le focus à ce select et en tapant au clavier les premières lettres de l'options.

Tout cela fonctionne très bien avec firefox, pour tester les autres navigateurs j'utilise les identités de konqueror parce que je n'ai pas la possibilité d'acceder à un poste windows pour tester ma fonction avec IE et encore moins un mac pour safari.

Enfin bref ma fonction ne fonctionne avec aucune des identités (même celle de ff) de konqueror je suppose donc que je l'ai mal écrite.

Voici le début de ma fonction :

function find_group (id) {

    var element = document.getElementById(id);
    var conteneur = document.getElementById('pict');
    var timeout;

    element.onkeypress = function (event) {//Konqueror ne passe jamais cette étape
        clearTimeout(timeout);//reset du timeout

        if (event.which) {
            var char = event.which;
        }
        else {
            var char = event.keyCode;
        }
..
..
..

Je ne met volontairement pas la suite car Konqueror bloque à la ligne
  element.onkeypress = function (event) {

Après je en sais pas si ce que j'ai écris est faux mais ff le fait quand même ou si c'est juste une écriture spécifique à ff.

En tout cas merci de vos réponses.

Elo

21 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
15 févr. 2008 à 04:56
ch'tit exemple qui fonctionne avec IE(7), FF,K-Meleon,Opera,Safari...
    peut pas dire avec Konqueror, mais pas de raisosn ( euh ? )

<script type="text/javascript">
var chaine ='';
function find_group (sel)
{   sel.onkeyup = function(event)
    {   evt = event?event:window.event;
        change_group (sel, evt);
    }
}
function change_group( sel, evt)
{   var tch=evt.which?evt.which:event.keyCode;
    var car = String.fromCharCode(tch);
    chaine+=car;
// ajouté pour "voir" ce qui se passe =======
document.getElementById("toto").value=chaine;
// ==========================================
}
</script>

<select     id = "group0a" name="group0"
            onFocus="find_group(this);"
            onblur="this.onkeyup=null;"
            size=5>
    <option>1
    <option>2
    <option>3
</select>

remarques :

    il va falloir expliquer,

        car pas facile de deviner qu'en "pointant" le select, il

        faut frapper sur le clavier pour faire une recherche

    pas très "convivial"

        frappe en aveugle

        aucune possibilité de rectification, modif... copier/coller....

            ( ou alors il faut gérer les touches del, backspace, Ctrl+V, les flèches, ins ...

                et c'est bien compliqué )

    franchement ? j'aurais fait la saisie dans "un input text normal"

    ch'tit exemple ici

<hr />                Cordialement            Bul        
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
15 févr. 2008 à 11:26
onKeyPress (en maintenant une touche appuyée)
    Entre en action quand l'utilisateur appuie sur une touche et la maintient appuyée.
onKeyup (en relâchant la touche)
    Entre en action quand l'utilisateur appuie sur une touche et la relâche.

pour l'histoire des Majuscules, keyCode et which c'est le n° de touche, pas plus.
    maj/ctrl/alt.... ce sont des touches elles aussi
    qu'on peut tester "autrement"

<script type="text/javascript">
function testACS(evt)
{    return     (   "Alt   : "+evt.altKey+"\n"+
                    "Ctrl  : "+evt.ctrlKey+"\n"+
                    "Shift : "+evt.shiftKey
                );
}
</script>

+--------------------------------------+
|                Exemple               |
| Cliquer ici,  en appuyant [ ou pas ] |
|   sur Alt, et/ou Ctrl, et/ou Shift   |
+--------------------------------------+

<hr />                Cordialement            Bul        
3
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
14 févr. 2008 à 13:51
Bon j'ai un petit peu changer donc c'était bien ça onkeypress = function (event) n'est pas reconnu il y a donc la solution

onkeypress = nom_de_la_fonction(params)...

Je bosse la dessus pour le moment si je m'en sors pas je reviesn vous voir ;-)

Mais bon si vous avez une solution ça m'aiderai ar avec cette solution ça ne fonctionne pas du tout comme je le voulais...
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 févr. 2008 à 14:54
Bonjour,
    je ne savais pas très bien comment répondre...
    je n'ai pas compris si c'était un problème général ou spécifique à konqueror
       sur konqueror je ne pourrais guère t'aider...
       si ça plante sur la plupart des navigateurs, on peut regarder...

<hr />                Cordialement            Bul        
0

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

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 févr. 2008 à 15:00
si c'est général :

function Touche(evt)
{  var tch=ie?event.keyCode:evt.which;
    if ( tch==n° d'ordre de la touche )    // 110, par exemple, c'est le point
    {      }
}
...
event = event?event:window.event;
Touche(event);

<hr />                Cordialement            Bul        
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 févr. 2008 à 15:02
j'ai omis ie qui est=true si on est avec IE, false sinon
<hr />                Cordialement            Bul        
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
14 févr. 2008 à 15:03
En le truc c'est que pour que IE accepte passe à l'étape suivante il faut que j'ecrive
element.onkeypress = change_group(event, id);

function change_groupe (e, id) {
    //le reste de ma fonction ici

}

Maintenant le truc c'est que ma fonction n'a plus du tout le comportement attendu... car a partir du moment ou je donne le focus a mon select il execute la fonction change_groupe aulieu d'attendre que l'utilise tape sur une touche...
De plus je n'ai pas accès a un poste windows quand je le veux et je ne crois pas que je puisse installé un debuggeur non plus car ce sont des poste ou il y que très peu de droits...

Enfin bref je sais pas trop quoi faire.

Une petit idée? Tu veux voir mes 2 versions de fonctions pour comprendre?

Merci

Elo
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 févr. 2008 à 15:20
c'est IE qui rale ?   non ?!?...

var event = event?event:window.event;
element.onkeypress = change_group(event, id);

function change_groupe (e, id) {
   var tch=event.keyCode?event.keyCode:e.which;
   //on peut traiter tch et document.getElementById(id)
}

enfin.. pas loin ( pas testé ) et si id est ok....

>>Tu veux voir mes 2 versions de fonctions pour comprendre?
    quelles 2 versions ?
    fais nous plutôt un extrait ( le minimum ) pour voir ce qui se passe
          et où ça queute.
       ( d'ailleurs ça te permettra peut-être de résoudre seulE )

<hr />                Cordialement            Bul        
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
14 févr. 2008 à 15:49
Maintenant c'est ff qui rale je lui declare event après il me dit que c'est pas defini mais bon (c'est pas le plus important je me debrouillerait pour ça) pour IE il l'execute mais quand on donne le focus pas quand il y un onkeypress

voici un exemple pour mon select un truc normal...
<select id = "group0a" name="group0" onFocus="find_group ('group0a');" onBlur="javascript:initialize();">

La fonction qui fonctionne avec ff en raccourcis
//variables globales
var chaine ='';
var j = 0;
function find_group (id) {

    var element = document.getElementById(id);
    var conteneur = document.getElementById('pict');

    element.onkeypress = function(event) {

        if (event.which) {
            var char = event.which;
        }
        else {
            var char = window.event.keyCode;
        }
            var character = String.fromCharCode(char);
            chaine = chaine+character;
       //je vide mon select et recherche les options correspondantes a la chaine entrée les options sont enregistré dans une variable globale
   }
}

Et ce que je viens d'ecrire pour que ça fonctionne avec IE en raccourcis aussi

//variables globales
var chaine ='';
var j = 0;
function find_group (id) {

    var element = document.getElementById(id);
     var event = event?event:window.event;
    element.onkeypress = change_group (id, event);
}
    function change_group(id, event) {
        var conteneur = document.getElementById('pict');
        var element = document.getElementById(id);

        if (event.which) {
            var char = event.which;
        }
        else {
            var char = event.keyCode;
        }
            var character = String.fromCharCode(char);

            chaine = chaine+character;
       //je vide mon select et recherche
les options correspondantes a la chaine entrée les options sont
enregistré dans une variable globale
    }

Bon maintenant IE ne cherche pas a comprendre si y'a un onkeypress ou pas il execute change_group quand on donne le focus au select... et ff rale car event n'a pas de propriété... en tradusant de l'anglais ;-)

Merci
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
14 févr. 2008 à 15:57
>>  ( d'ailleurs ça te permettra peut-être de résoudre seulE )

Precise bien sur le E pour montrer que ya des femmes aussi dans le monde de l'infomatique
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
14 févr. 2008 à 17:07
Bon j'ai parcourue ds milliers de kilomètres pour trouver un poste sous windows et j'en ai trouvé un.

Pour ma solution qui fonctionne avec ff, il me dit que which à la valeur nulle ou n'est pas un objet (je comprend pas pourquoi il s'occupe de which) et refuse de faire quoi que ce soit...

Pour l'autre solution ben d'après lui il y a une erreur au crochet fermant de la fonction find_group... donc en faite pas du tout le même comportement que konqueror et son identité IE (c'est bon a savoir d'ailleurs). Konqueror lui execute change_group meme si ya pas touche appuyée...

I'm still looking for a solution ;-)
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
15 févr. 2008 à 09:35
Il y a des indications dans le formulaire pour que l'utilisateur sache comment faire une recherche. Puis je ne fais que suivre les ordres venant du niveau au dessus de moi ;-) la touche backspace est prise en compte certaines autres sont desactivées.

En tout cas je te remercie je vais regarder ça et je reviens dans la journée ;-)

Merci
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
15 févr. 2008 à 09:51
>>je ne fais que suivre les ordres venant du niveau au dessus de moi
    d'où que ça vienne, quand c'est pas bon : c'est pas bien ( et lycée de Versailles )
    ( mais ce n'est que mon avis, qui ne vaut pas grand chose )
<hr />                Cordialement            Bul        
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
15 févr. 2008 à 09:55
Tout avis a sa valeur... Sinon la democratie ne serait pas (mais des fois on se demande)

Par contre lycée de Versailles, je ne vois pas de rapport :-s
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
15 févr. 2008 à 10:13
vil plagiat de Pierre Dac qui utilisait ce calembour en lieu et place de "vice versa"
( ça vaut bien mieux en le disant qu'en l'écrivant )
<hr />                Cordialement            Bul        
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
15 févr. 2008 à 10:38
C'est bien codessources ça permet d'améliorer sa culture générale. Je ne connaissais pas les calembours (honte à moi).

Bon aller je me met à bosser un peu. Ca fait 1h40 que je suis au boulot et j'ai pas commencée encore ... :-D
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
15 févr. 2008 à 10:40
En tout cas ce que tu m'as donné ça fonctionne j'ai plus qu'a l'adapter
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
15 févr. 2008 à 10:55
>>ça fonctionne
    nickel.   merci du retour.     

>>Bon aller je me met à bosser un peu.
    pour gagner plus, il faut bosser plus.

à bientôt.
<hr />                Cordialement            Bul        
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
15 févr. 2008 à 11:04
J'ai adapté mon code, maintenant je dis f**k konqueror qui l'utilise a part moi? (ça veut pas fonctionner sous konqueror mais on fera sans lui)

Et j'ai un petit truc assez bizard sous ff le caractère se met en majuscule avec onkeyup et se duplique dans ma chaine alors qu'avec onkeypress c'est nickel? Y'a pourtant pas énormement de différence entre les deux non?

Merci beaucoup en tout cas de ton aide. :-)

>>>>Bon aller je me met à bosser un peu.
    >>pour gagner plus, il faut bosser plus.

Si je fais des heures sups elles sont pas payée alors je les recupere comme je peux ;-)
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
15 févr. 2008 à 11:19
C'est bon c'est réglé ;-)

Merci encore.
0
Rejoignez-nous