IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

surnaturel selectedIndex sur IE6


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Par défaut surnaturel selectedIndex sur IE6
    Bonjour,

    Je bloque sur un problème des plus étranges depuis 2h, je me résouds à demander de l'aide

    Essayons d'être clair : J'ai tout simplement un select qui ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select multiple id="blabla_left" onclick="__WebSelector_add('blabla')" onmouseover="clearTimeout(__WebSelector_timer);this.focus();" onmouseout="__WebSelector_showDiv('blabla', false);">
    J'ai mis tous les evénements, car peut-être qu'un des autres parasite mais celui qui nous interesse est le onclick. Notez que je ne veux pas du onchange (car le onchange est déclenché par le déplacement du curseur dans la liste avec les flèches)

    Note 1: le this.focus() peut surprendre mais il permet d'éviter les comportement énervants avec la roulette de la souris. L'enlever ne change rien au pbm.
    Note 2: Le select est dans un div masqué par défaut (d'où la gestion des onmouseover et onmouseout)

    Voici le début de la fonction qui récupère le onclick:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function __WebSelector_add(strID) {
    	var oList = document.getElementById(strID + '_left');
    	var oOption = oList.options[oList.selectedIndex]; // Plante
    [...]
    C'est tout bête: Je récupère ma liste, puis le selectedIndex de la liste.

    Ca fonctionne nickel sur FF, par contre le comportement est surréaliste sur IE6 (pas encore essayé sur IE7)
    1- La première fois que je clique sur un élément de ma liste, j'ai un plantage IE sur la 2e instruction de la fonction. En gros selectedIndex vaut toujours -1 à ce moment donc ça plante.
    2- A partir du 2e click ça fonctionne (le fait d'avoir "bleuté" un élément de la liste fait que ça passe)
    3- Si je rajoute un alert(oList.selectedIndex) entre les deux lignes, CA FONCTIONNE!!!! C'est à dire que l'alert me renvoie -1 et non mon index mais ensuite il me récupère bien l'option et la bonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function __WebSelector_add(strID) {
    	var oList = document.getElementById(strID + '_left');
    	alert(oList.selectedIndex); // Renvoie -1
    	var oOption = oList.options[oList.selectedIndex]; // Ne plante pas
    [...]
    4- Comme je suis un gros malin, j'ai tenté de mettre 2 alert(oList.selectedIndex) l'un à la suite de l'autre. Et bien le premier renvoie -1, et le second renvoie la bonne valeur. Wonderful.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function __WebSelector_add(strID) {
    	var oList = document.getElementById(strID + '_left');
    	alert(oList.selectedIndex); // Renvoie -1
    	alert(oList.selectedIndex); // Renvoie la bonne valeur
    	var oOption = oList.options[oList.selectedIndex]; // Ne plante pas
    [...]

    5- Comme je suis vraiment un gros malin, j'en ai déduit que le fait d'appeler oList.selectedIndex une fois "débloquait" sa valeur. J'ai donc tenté de le faire avec un truc plus discrèt qu'un alert (mettre sa valeur dans une variable) mais par contre ça ne fonctionne pas. Je ne suis pas si malin (à moins que ça soit IE? )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function __WebSelector_add(strID) {
    	var oList = document.getElementById(strID + '_left');
    	var iSelectedIndex = oList.selectedIndex;
    	var oOption = oList.options[oList.selectedIndex]; // Plante
    [...]

    Etonnant non, en tout cas?

    Bref... comment m'en sortir?????

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Par défaut
    Ha oui, j'ai oublié de préciser, si j'utilise le onchange, rien de tout ça ne se produit. Simplement il m'est impossible de l'utiliser à cause de l'ergonomie souhaitée pour mon contrôle (compliqué à expliquer mais c'est à cause des fleches du clavier)

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    lors du onclick le "nouveau" selectedIndex n'est pas encore pris en compte ...

    mets un setTimeout ça devrait resoudre ton souci
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Par défaut
    Yep, nickel. C'est ce qu'il fallait faire. Complètement glucose tout de même comme problème!

    Le truc c'est que j'avais tenté entre temps le setTimeout mais à l'intérieur de la fonction en oubliant que c'était asynchrone... Je ne suis pas un grand habitué du javascript...

    Je l'ai géré au niveau de l'appel à la fonction, ça marche.

    Merci!

    (Et pas merci à IE6...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sous vista tester son site sur IE6 et IE7
    Par Invité dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 22/01/2008, 17h44
  2. setAttribute ne marche pas sur IE6
    Par mastasushi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/06/2007, 16h18
  3. Affichage bizarre sur IE6 et IE7
    Par gwenagan dans le forum Internet
    Réponses: 2
    Dernier message: 11/06/2007, 19h03
  4. texte qui ce répète et Height non respecté sur IE6
    Par Strix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/04/2007, 16h16
  5. Faire apparaître un menu est lent sur IE6
    Par SlashOwnsU dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/09/2006, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo