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 :

Pourquoi faut il double-cliquer ?


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Pourquoi faut il double-cliquer ?
    Bonjour,
    Tout d'abord je tiens à prévenir que j'ai pas fait de recherche sur le forum car je ne sais pas quoi chercher...
    Donc j'ai fait un petit explorateur de fichiers en "ajax" que vous pouvez trouver ici : http://webeleve.ensmp.fr/~06quehan/nv.php . Je suis débutant total en javascript (le script que je vous montre est en grande partie pompé ailleurs) (et débutant tout court pour le reste) et je ne comprends simplement pas pourquoi la premiere fois que je clique sur un lien, je dois double-cliquer pour dérouler l'arbre alors qu'apres un simple clic suffit. Accessoirement, je ne comprend pas non plus pourquoi l'ascenseur horizontal s'affiche lorsque on déroule la chose...
    Merci d'avance pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    ce n'est pas un double clic... Il faut en fait réaliser 2 fois un simple clic sur l'élément.

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function change(id){
    	var d = document.getElementById(id);
    	var ds = document.getElementById(id+'s');
    	if(d){
    		if(d.style.display == 'block'){
    			d.style.display = 'none';
    			ds.style.display = 'block';
    		}
    		else {
    			d.style.display = 'block';
    			ds.style.display = 'none';
    		}
    	}
    }

    La syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    element.style.attribut
    ne permet pas d'accèder aux informations définies dans la CSS, mais aux informations définies dans l'attribut style des balises, par exemple :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div style="display: block; color:#AAAAAA; border: 1px solid #AAAAAA">
    bla bla bla bla bla bla 
    </div>


    Il faut savoir que si tu définis pour un élément dans la feuille de style ceci :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    display: none; // ou block
    ton code javascript
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    d.style.display
    ne renverra.... rien : ni "block" ni "none" (ou une autre valeur de l'attribut display). Fais un alert(d.style.display) juste avant la condition

    Dans ce cas la condition
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    if (d.style.display == 'block')
    est fausse donc le else est appliqué (qui est visiblement le style par défaut de tes éléments) :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	d.style.display = 'block';
            ds.style.display = 'none';
    c'est pour ça que lors du 1er clic "rien de se passe". Mais tu attribues une valeur à display (block et none). Tu réalises une "initialisation" de display.

    Lors du second clic sur le même élément les valeurs de display sont définies (lors du 1er clic) donc dans ce cas ta condition devient vraie.

    Lors du 3ème clic (toujours sur le même élément) les valeurs de display existent toujours, ta condition est fausse, etc...


    Le mieux pour éviter ce désagrément :
    ajoute une condition à ton if :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(d.style.display == 'block' || d.style.display == '' )
    ou initialise l'attribut display en utilisant l'attribut style de tes div et non la CSS.

  3. #3
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    il y a aussi obj.currentStyle qui renvoie le style avec les CSS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(d.currentStyle.display == 'block' || d.currentStyle.display == '' )

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par FremyCompany
    il y a aussi obj.currentStyle qui renvoie le style avec les CSS
    Uniquement valable pour IE...

    Pour Firefox, il faut passer par getAttribute (qui n'est pas reconnue par IE).
    Par contre pour Opéra, je ne sais pas

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Je viens de tester et ca marche sous FF aussi

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par FremyCompany
    Je viens de tester et ca marche sous FF aussi
    ne marche pas avec la version 1 de Firefox

  7. #7
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Sans doute un ajout de la v2.0

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Ok ! Merci beaucoup, j'ai tout compris !

    Bonne continuation !

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par FremyCompany
    Sans doute un ajout de la v2.0
    oui, sans doute

  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 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 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    tiens je ne connaissait pas ce currentSytle ...

    Pratique pour accéder au style css
    à noter qu'il retourne le style par défaut de l'objet si rien n'est indiqué ...

    par exemple sur un select il retourne un width auto ...

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

Discussions similaires

  1. Pourquoi faut-il monter/démonter
    Par ChPr dans le forum Administration système
    Réponses: 9
    Dernier message: 10/05/2007, 13h22
  2. [Débat] Pourquoi faut il encore faire des sites Web compatibles IE ?
    Par Strix dans le forum Général Conception Web
    Réponses: 63
    Dernier message: 16/03/2007, 12h28
  3. [Cookies] Obligation de double cliquer sur "Submit"
    Par PicVert dans le forum Langage
    Réponses: 2
    Dernier message: 26/12/2006, 18h30
  4. Pourquoi faut-il utiliser des tables plutôt que des frames ?
    Par malicia_bm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 09/10/2006, 09h20
  5. Réponses: 3
    Dernier message: 18/11/2003, 13h22

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