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 :

ActiveElement et FF [FAQ]


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Points : 195
    Points
    195
    Par défaut ActiveElement et FF
    Bonjour tout le monde!
    Voila mon problème. J'avais écrit tout plein de pages à une époque, que je visualisais sous IE. Comme la mode est d'utiliser FF, j'ai voulu voir ce que ça donnait.... J'aurais peut etre pas du...
    J'ai des bouts de code javascript qui ne sont pas interprétés, et notamment celui-là : j'ai créé une liste déroulante, et donc, quand je clique sur le bouton, la liste apparait, et si je clique ailleurs, elle doit disparaître. Pour ça, je teste le focus de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.document.activeElement.id
    Sauf que voila : ca marche bien sur IE, mais pas du tout sur FF. Apparement, y a pas de propriétés pour activeElement...
    Comment je pourrais le remplacer? Y a une fonction similaire sur FF?
    Merci pour vos réponses.
    Ciao.
    P.S.: désolé pour le triple message, mais je suis pas encore super habitué au forum, et y a eu un petit caffouillage.

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Bibicmoi
    Comment je pourrais le remplacer? Y a une fonction similaire sur FF?
    Euh, il n'y a pas de remplacement dans Firefox à proprement parler.
    En fait, le concept est plus celui de l'élement source de l'evenement.

    La seule façon de contourner cela, sans redefinir la page est d'utiliser un script du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (typeof document.activeElement == "undefined")
    document.addEventListener("focus", function(event) {
    document.activeElement = (event.target.nodeType == Node.TEXT_NODE) ? event.target.parentNode : event.target;
    }, false);
    Sinon, il faut repenser un peu la page. TU n'as certainement pas besoin de connaitre l'élement ayant le focus, même si ça peut être plus simple pour toi...

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    J'avais une usine à gaz qui consiste à peupler tous les composants de la page dynamiquement avec un onfocus qui modifie une varaible globale...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var ElementActif;
    function Actif(Obj){ElementActif=Obj;}
    et

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Points : 195
    Points
    195
    Par défaut
    Tout d'abord, merci pour vos réponses.
    Space, j'avais bien lu ta solution dans les différents sujets qui sont sur le forum... mais, comment dire... ca m'embetait un peu de faire tout ça, alors qu'en une ligne tout fonctionnait nickel
    Denis, je vais essayer de voir pour ta solution, même si je comprends pas trop ce que ça fait : si ça fonctionne, j'essaierai de comprendre
    Et pour répondre à ta question, ben voila : vous savez comment marche une liste déroulante; un champ texte, un bouton et une liste. La liste apparaît quand on clique sur le bouton et disparaît quand on clique sur un élément qui n'appartient pas a cet ensemble. Du coup, je n'ai peut être pas besoin de savoir qui a le focus, mais j'ai au moins besoin de savoir que le champ texte, le bouton ou la liste n'a pas le focus...
    Si ça peut aider...
    En tout cas, je vais revenir souvent j'ai l impression, parce que je crois bien que j'ai d autres trucs qui ne fonctionnent pas sous FF (y aurait pas une doc facile d'accès pour le javascript sous FF?)

  5. #5
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Bibicmoi
    Et pour répondre à ta question, ben voila : vous savez comment marche une liste déroulante; un champ texte, un bouton et une liste. La liste apparaît quand on clique sur le bouton et disparaît quand on clique sur un élément qui n'appartient pas a cet ensemble. Du coup, je n'ai peut être pas besoin de savoir qui a le focus, mais j'ai au moins besoin de savoir que le champ texte, le bouton ou la liste n'a pas le focus...
    Tu peux raisonner dans l'autre sens, comme le fais Google Suggest:
    Si je clicke sur un élement de ma liste déroulante, je laisse le focus au champ texte, sinon, le focus part ailleurs, et je fais le ménage sur le onblur du champ texte.

    Cf:
    http://dcabasson.developpez.com/arti...ion-pas-a-pas/

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Points : 195
    Points
    195
    Par défaut
    OK, merci. Je vais regarder ça avec beaucoup d'attention (depuis le temps aussi que je dis qu'il faut que je regarde du cote du xmlhttprequest...!)
    Je vous préviens pour vous dire comment je m'en sors.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Points : 195
    Points
    195
    Par défaut
    Bon, je reviens aux nouvelles...
    J'ai essayé ta méthode Denis, et ça ne donne rien du tout. La console Javascript de FF me donne toujours la même erreur "Erreur : self.document.activeElement has no properties"
    J'ai aussi lu le lien, et je dois dire que... trop compliqué pour moi, c'est vraiment pas de mon niveau actuel...
    Du coup, je me retourne vers toi Space : comment fais tu pour peupler dynamiquement de onfocus? (je fais une recherche quand même, mais je pose la question tout de suite pour pas avoir à poster 3 fois de suite... )

  8. #8
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Bibicmoi
    Bon, je reviens aux nouvelles...
    J'ai essayé ta méthode Denis, et ça ne donne rien du tout. La console Javascript de FF me donne toujours la même erreur "Erreur : self.document.activeElement has no properties"
    Et en mettant plutot sur click:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (typeof document.activeElement == "undefined")
    document.addEventListener("click", function(event) {
    document.activeElement = (event.target.nodeType == Node.TEXT_NODE) ? event.target.parentNode : event.target;
    }, false);
    (ça me parait quand même plus logique...)

  9. #9
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    pour peupler tous les objet je partais sur un truc du genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <input id='1' />
    <input id='2' />
    <input id='3' />
    <input id='4' />
    <input id='5' />
    <input id='6' />
    <input id='7' />
    <input id='8' />
    <input id='9' />
    </body>
    <script type='text/javascript' >
    var Active
    var TabElts=document.getElementsByTagName('*')
    for (i=0; i<TabElts.length;i++){
    TabElts[i].onfocus=function(){window.event.cancelBubble=true;Active=this;alert(Active.id);}
    }
    
    </script>

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Points : 195
    Points
    195
    Par défaut
    Mea Culpa
    Je suis désolé, j'ai dû rater quelque chose la première fois que j'ai tapé le code de Denis...
    Donc, le premier code marche nickel. Voila ce que ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (typeof document.activeElement == "undefined"){
               document.addEventListener("focus", function(event) {
                   document.activeElement = (event.target.nodeType == Node.TEXT_NODE) ? event.target.parentNode : event.target;
               }, false)
            }else{
                if ( (self.document.activeElement.id != textb) && (self.document.activeElement.id != listd) ) {
                   calql.style.visibility = 'hidden';
                }
            }
    avec textb, le champ texte, listd, la liste déroulante, et calql le div où se situe la liste.
    Mais j'ai un dernier souci. En fait, la liste disparaît bien quand on clique ailleurs... mais elle disparaît aussi quand on clique dessus. En clair, on ne peut pas sélectionner d'élément!
    Merci pour vos réponses.
    P.S.: Denis, si tu pouvais m'expliquer le code que tu as écrit, parce que là, je dois avouer que je comprends pas trop ce que j'ai écrit, du coup, je peux pas le modifier si j'en ai envie...

Discussions similaires

  1. Impossible lire en js activeElement
    Par delphy44 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/08/2013, 16h17
  2. document.activeElement en jquery
    Par Sharcoux dans le forum jQuery
    Réponses: 7
    Dernier message: 09/08/2011, 16h45
  3. Palier à "document.activeElement" sous firefox
    Par merise_lover dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2008, 22h15
  4. document.activeElement
    Par fred777888999 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/05/2005, 17h40

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