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 :

bizarre, IE bug dans une fonction


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut bizarre, IE bug dans une fonction
    Bonjour,

    J'ai un soucis avec un script sur Internet Explorer 8.
    Je suis sur windows 7 64bits.

    Le script est assez simple et permet à un <div>, qui part d'une hauteur de 0px, de grandir jusqu'à 500px de haut. Il y a 4 liens en bas de la <div>, qui permettent de faire remonter le <div> jusqu'à 0px, puis de le faire redescendre en affichant un autre contenu correspondant au lien cliqué.

    Le script fonctionne très bien sur Firefox, Chrome et Safari. Le rapport d'erreur d'Internet Explorer dit "l'argument n'est pas valide".

    Pour les courageux, voici le code JS commenté :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    var HeightStart = 0; /* initialise la hauteur de la <div> à 0 */
    var HeightPX; /* initialise la variable HeightPX sans valeur pour l'instant */
    var passage_bas = 0; /* compe le nombre de lecture de la fonction upAndDown('', 'verslebas') */
     
    setTimeout('upAndDown("contenu1", "verslebas")', 40); /* déclenche la fonction upAndDown avec comme 1er argument l'ID du premier contenu à afficher par défaut et comme 2e argument l'instuction d'augmenter la hauteur du <div> */
     
    function upAndDown(content, upOrDown)/* "content" sera donc l'ID du contenu à afficher selon le lien cliqué et "upOrDown" sera pour savoir si on augmente ou réduit la hauteur du <div> */
    {
     
    	if(upOrDown == "verslebas")/* on haugmente la hauteur */
    	{
    		if(HeightStart <= 200)/* vérifie que la hauteur est bien inférieure à la hauteur voulue */
    		{
    			passage_bas++; /* incrémente le nombre de lecture de la fonciton */
    			if(passage_bas == 1)/* à la 1ere lecture, affiche le bon contenu (ils sont tous en display:none; par défaut) */
    			{
    				document.getElementById(content).style.display = 'block';
    			}
     
    			HeightPX = HeightStart+'px'; /* ajoute "px" à la hauteur actuelle */
    			document.getElementById('main').style.height = HeightPX; /* change le style du <div> (qui s'appel "main") en lui affectant la hauteur atteinte à chaque lecture. */
    			HeightStart += 20; /* augmente la hauteur de la variable pour qu'elle soit affectée au style du <div> au prochain passage */
    			setTimeout(function(){upAndDown(content, upOrDown);}, 50); /* attend 50 Millisecondes avant de relancer la fonction avec les mêmes arguments jusqu'à ce que la hauteur de 200px soit atteinte. */
    		}
    		else{passage_bas = 0;HeightStart -= 20;}/* réinitialise le compteur de passage pour la prochaine utilisation et réajuste la hauteur car la fonction est finie et ne va pas se relancer automatiquement */
    	}
    	else if(upOrDown == "verslehaut")/* on baisse la hauteur */
    	{
    		if(HeightStart >= 0)/* vérifie que la hauteur est supérieure à 0. */
    		{					
    			HeightPX = HeightStart+'px';/* ajoute "px" */
    			document.getElementById('main').style.height = HeightPX;/* change le style du <div> */
    			HeightStart -= 20; /* baisse la hauteur */
    			setTimeout(function(){upAndDown(content, upOrDown);}, 50); /* relance la fonction avec les mêmes arguments jusqu'à ce que la hauteur soit de 0px. */
    		}
    		else
    		{
    			passage_haut = 0; /* réinitialise le compteur de passage */
    			for(nbContent=1;nbContent<=4;nbContent++)/* la hauteur est de 0px donc on peut masquer tous les contenus (le <div> est en overflow:hidden; donc pas besoin de les masquer plus tôt. */
    			{document.getElementById('contenu'+nbContent).style.display = 'none';}
    			upAndDown(content, "verslebas");/* la fonction est finie, le <div> est à 0px, on lance la fonction pour le faire redéscendre en gardant l'ID du nouveau contenu à afficher. */
    		}
    	}
    	else{}
    }
    et le code html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <div id="main">
        <div id="contenu1">CONTENU 1</div>
        <div id="contenu2">CONTENU 2</div>
        <div id="contenu3">CONTENU 3</div>
        <div id="contenu4">CONTENU 4</div>
    </div>
     
    <a href="#" onclick="upAndDown('contenu1', 'verslehaut');">lien contenu 1</a> 
    <a href="#" onclick="upAndDown('contenu2', 'verslehaut');">lien contenu 2</a> 
    <a href="#" onclick="upAndDown('contenu3', 'verslehaut');">lien contenu 3</a> 
    <a href="#" onclick="upAndDown('contenu4', 'verslehaut');">lien contenu 4</a>
    Enfin voici les étapes pour reproduire le bug :
    . attendre que le <div> s'ouvre une première fois entièrement
    . cliquer sur le lien du contenu 2, 3 ou 4
    . le <div> se referme et là le bug se produit sur IE indiquant la ligne 21

    Voilà tout est dit. C'est peut-être tout bête mais je ne trouve pas. J'ai retourné la chose dans tous les sens et rien n'y fait. Je vous supplie donc de m'aider

    Merci

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Bonsoir, ajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( HeightStart < 0) HeightStart =0;
    juste avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HeightPX = HeightStart+'px'; /* ajoute "px" à la hauteur actuelle */

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut
    C'est magnifique merci beaucoup.

    Si ce n'est pas trop demander et pour ne pas mourir idiot, comment t'y es tu pris pour résoudre ceci aussi vite ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3
    Par défaut
    ok je viens de réaliser.

    En mettant <= 0, HeightStart devient négatif. à la fin de la fonction.
    Ensuite HeightPX doit être l'argument jugé invalide par IE.

    Je m'en veux un peu en ayant pas vu que ça serait négatif mais bon c'est le métier qui rentre ^^

    Merci encore.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    en fait IE n'aime pas qu'on lui definisse une hauteur ou largeur négative.
    Physiquement parlant une hauteur ou largeur négative ça n'existe pas.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 210
    Par défaut
    Si ce n'est pas trop demander et pour ne pas mourir idiot, comment t'y es tu pris pour résoudre ceci aussi vite ?
    du travail et encore du travail, de longues années, de préférence les bissextiles, d'expérience.
    NON plus sérieusement, c'est une chose récurrente que les tests aux bornes soient mal appréhendés, et avec un peu d'habitude et une bonne dose de chance...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/01/2014, 10h19
  2. Récupérer une variable dans une fonction "bizarre"
    Par Fan0u dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/04/2009, 15h49
  3. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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