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 :

blur appelé 2 fois


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut blur appelé 2 fois
    hello

    j'ai reproduit dans un exemple simplissime ce sur quoi je suis tombé après qu'un client m'ait remonté une anomalie dans une page web.
    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
    <html>
      <head>
        <script>
          var cpt = 0;
     
          function blurHandler()
          {
            document.getElementById("span").innerHTML+= "blur n°" + cpt + ", ";
            cpt++;
          }
        </script>
      </head>
      <body>
        <input type="text" value="salut" onblur="blurHandler()"/>
        <br/>
        <span id="span"></span>
      </body>
    </html>
    quand je suis dans l'input et que je clique hors du navigateur, onblur est déclenché (normal). mais quelqu'un pourrait-il m'expliquer pourquoi lorsqu'on revient dans le navigateur le onblur de l'input est déclenché une seconde fois ??

    NOTE :
    - ce comportement intervient avec IE6, FF3
    - le onblur n'est déclenché que quand on revient dans le navigateur avec Opera 9 et Chrome

    Mon client est sous IE6

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Salut
    Citation Envoyé par bigboomshakala Voir le message
    quand je suis dans l'input et que je clique hors du navigateur, onblur est déclenché (normal). mais quelqu'un pourrait-il m'expliquer pourquoi lorsqu'on revient dans le navigateur le onblur de l'input est déclenché une seconde fois ??
    Avec le curseur dans l'input ou pas ?
    Si oui : normal (le changement de fenêtre entraîne la perte du focus)
    NOTE :
    - ce comportement intervient avec IE6, FF3
    - le onblur n'est déclenché que quand on revient dans le navigateur avec Opera 9 et Chrome

    Mon client est sous IE6
    Donc, ton client n'a pas le problème ?
    Pas compris ta NOTE, en fait

    A+

  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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    il semblerait que lorsque tu quittes le navigateur il declenche le blur mais le focus reste dans le champs enfin le caret n'est pas déplacé et le veritable blur est pris en compte lors du retour de focus sur le navigateur.

    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
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Salut Avec le curseur dans l'input ou pas ?
    Si oui : normal (le changement de fenêtre entraîne la perte du focus)
    Donc, ton client n'a pas le problème ?
    Pas compris ta NOTE, en fait

    A+
    oui curseur dans l'input, puis curseur hors du navigateur
    non pas normal (ou en tout cas pas intuitif)
    si, le client a un problème puisqu'il est dans le cas où il y a 2 onblur au lieu d'un


    dans la situation réelle avec mon client :
    - lors de mon premier blur je mets des variables à null à la fin de la fonction
    - lors du "2è blur" je tente d'accéder à des propriétés d'une varible null = exception

    j'ai résolu en ne remettant pas à null. c'était une sécurité, mais de toute façon la variable était réaffecté au focus suivant de l'input. mais j'ai potentiellement d'autres merdes dans ce genre dans le code, voire dans d'autres projets...

    je m'attendais à ce que, comme avec Opera et Chrome, il n'y ait qu'un blur.
    Et encore...
    avec Opera et Chrome, le blur ne se fait que quand on revient dans le navigateur, pas quand on le quitte. du coup moi je m'attend à ce que quelque chose se passe si l'utilisateur quitte le navigateur et rien ne se produit (qui nous dit que le gentil utilisateur va revenir dans le navigateur pour que le blur se passe ? il peut très bien couper sa session, avoir un écran bleu fatal, etc... )

    Citation Envoyé par SpaceFrog Voir le message
    il semblerait que lorsque tu quittes le navigateur il declenche le blur mais le focus reste dans le champs enfin le caret n'est pas déplacé et le veritable blur est pris en compte lors du retour de focus sur le navigateur.

    et quel est le comportement "standard" dirons-nous ? c'est space(sans frog ) dans ma tête.

  5. #5
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    aucune idée sur le standard...

    je pense juste à une chose ...

    as tu essayé un cancelBubble sur l'input ...

    ça pourrait provenir de là ..
    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 !

  6. #6
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    je viens de tster et non le comportement est identique avec le cancelBubble ...

    selon toute logique il ne devrait pas y avoir deux declenchements ...
    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 !

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    dans mon exemple précédent j'ai modifié la fonction et tester avec IE6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function blurHandler()
          {
            document.getElementById("span").innerHTML += "blur n°" + cpt + ", ";
            cpt++;
            event.cancelBubble = true;
          }
    pas de changement, c'est tout pareil

    EDIT : owned! bon je lag par rapport à vos réponses lol.

  8. #8
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Je n'arrive pas à reproduire sous FF3 le phénomène décrit (ou je n'ai rien compris au problème )

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par bigboomshakala Voir le message
    et quel est le comportement "standard" dirons-nous ?
    Pour moi, c'est celui que tu constates dans FF et IE6

    En effet, il n'y a toujours au plus qu'un objet ayant le focus à l'écran (je dis bien "à l'écran" et non "dans la fenêtre du nav"). Le focus ne peut etre, par définition, que sur un objet de la fenêtre active.
    Quand la fenêtre qui a le focus passe en arrière plan, elle perd forcément le focus (as-tu déjà essayé de saisir du texte dans une fenêtre qui est en arrière plan ?) et déclenche le onblur.
    Pour aller plus loin, si tu gères aussi le onfocus dans le même champ, il devrait se déclencher lorsque la fenêtre repasse en avant plan.
    En résumé, quand le champ a le focus et que tu changes de fenêtre :
    => tu déclenches le onblur en la passant en arrière plan
    => tu déclenches le onfocus quand elle repasse au 1° plan

    Tout ça sans explicitement quitter le champ ...

    EDIT : donc dans ton oblur, faudrait pouvoir tester si la fenêtre est la fenêtre active, et sinon, annuler le traitement

    A+

  10. #10
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    j'avais aussi testé ça Ebzz mais ça n'a pas l'air de donner de meilleur résultat
    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 !

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Alors du coup, je sais pas si c'est compatible avec ta page, mais tu ne pourrais pas utiliser onchange plutôt que onblur ?
    Ca résoudrait le problème ...

    A+

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 02/01/2007, 09h14
  2. [C# 2.0] Pourquoi le load est-il appelé plusieurs fois ?
    Par Worldofdada dans le forum ASP.NET
    Réponses: 9
    Dernier message: 14/09/2006, 08h34
  3. Action appelée 2 fois, avec des param différents
    Par DesiS dans le forum Struts 1
    Réponses: 2
    Dernier message: 23/08/2006, 10h47
  4. Réponses: 6
    Dernier message: 17/08/2006, 19h16
  5. Réponses: 5
    Dernier message: 14/04/2006, 18h58

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