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 :

[IE] Boucle for, truc de fou


Sujet :

JavaScript

  1. #1
    Membre chevronné Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Par défaut [IE] Boucle for, truc de fou
    Bonjour à tous,

    Ca fait une heure que j'essaye de débugger ce satané code IE.
    Tout fonctionne sous FF comme d'hab.
    Sous IE 7, c'est surprenant !

    Voici mon code optimisé IE :
    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
    16
    17
    var tab=new Array();
    var tab_img=new Array('ac', 'pk', 'bp', 'ht');
     
    function zoom(container, maxWidth, maxHeight, minWidth, minHeight){
    	for(var i=0; i<tab_img.length; i++){
    		tab[i]=false;
    		var newimg=document.createElement('img');
    		newimg.setAttribute('src', 'img/'+tab_img[i]+'.gif');
    		newimg.setAttribute('id', 'img'+i);
    		newimg.style.setAttribute('cssText', 'width:'+minWidth+'px; height:'+minHeight+'px;');
    		newimg.setAttribute("onclick", function(){alert('Play '+i);});
    		document.getElementById(container).appendChild(newimg);
    	}
    }
    window.onload=function(){	
    	zoom('area', 68, 107, 34, 54);
    }

    Dans mon HTML, j'ai juste
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="area"></div>

    Donc toutes mes images ont un onclick="alert('Play 4');" !!?
    C'est fou.. je me suis lu et relu. Je vois pas où j'ai merdé.

  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
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var newimg=document.createElement('img');
    newimg.setAttribute('src', 'img/'+tab_img[i]+'.gif');
    newimg.setAttribute('id', 'img'+i);
    newimg.style.setAttribute('cssText','width:'+minWidth+'px;height:'+minHeight+'px;');
    newimg.setAttribute("onclick", function(){alert('Play '+i);});
    document.getElementById(container).appendChild(newimg);
    document.getElementById('img'+i).onclick = function(){alert('Play '+i);};
    A+

  3. #3
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Euh, à moins que je ne me trompe, ça ne changera rien. Javascript étant synchrone c'est la dernière valeur de la boucle qui sera affectée à tous les élements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		document.getElementById('img'+i).onclick = function(num) {
    			return function(){
    				alert('Play '+num);
    			};
    		}(i);

  4. #4
    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 660
    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 660
    Billets dans le blog
    1
    Par défaut
    j'ai déja collé un truc sur ça dasn la FAQ ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for(var i=0; i<tab_img.length; i++){
    		tab[i]=false;
    		var newimg=document.createElement('img');
    		newimg.src= 'img/'+tab_img[i]+'.gif';
                    newimg.indice=i;
    		newimg.id='img'+img.indice;
    		newimg.style.cssText='width:'+minWidth+'px; height:'+minHeight+'px;';
    		newimg.onclick=function(){alert('Play '+this.indice);});
    		document.getElementById(container).appendChild(newimg);
    	}
    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 !

  5. #5
    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 SpaceFrog Voir le message
    j'ai déja collé un truc sur ça dasn la FAQ ...
    Il me semblait, mais j'ai pas retrouvé

  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 660
    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 660
    Billets dans le blog
    1
    Par défaut
    ou dans les contributions ?
    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
    Membre chevronné Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Par défaut
    Il n'y a que la méthode Shinuza qui fonctionne..
    Merci les mecs !

    Bon désolé mais je donne le point à Shinuza.

  8. #8
    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 660
    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 660
    Billets dans le blog
    1
    Par défaut
    Oui bon une paire de coquilles dasn le script ...

    mais ça marche ... pour preuve :

    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
    <script type='text/javascript'>
    function MyRandomMess(){
    var tab_img=new Array(10); 
     
    for(i=0; i<tab_img.length; i++){
    		var newimg=document.createElement('div');
           newimg.indice=i;
    		newimg.id='img'+newimg.indice;
    		newimg.style.cssText='width:100px; height:100px;backgroundColor:red;border:solid 2px blue;';
    		newimg.onclick=function(){alert('Play '+this.indice)};
    		document.getElementById('container').appendChild(newimg);
    	}
    }
    </script>
    </head>
     
    <body onload="MyRandomMess()">
    <div id="container"></div>
    </body>
     
    </html>
    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 !

  9. #9
    Membre chevronné Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Par défaut
    En recopiant ton code intégralement, j'avoue que ça fonctionne.
    J'ai du oublier quelque chose en modifiant mon script tout à l'heure..

    Je split le point donné Shinuza et je t'en file la moitié.

  10. #10
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par défaut
    Juste un truc, écrire dans les propriétés d'un HTMLElement est une des premières causes de leak sous IE. D'ou l'intérêt du bind ici, ou l'utilisation de forEach qui est un parfait walk-around pour ce genre de cas (et ça permet une approche un peu plus orientée "fonctionnel")

  11. #11
    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 660
    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 660
    Billets dans le blog
    1
    Par défaut
    ou éventuellement d'utiliser Firefox ?
    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 !

  12. #12
    Membre chevronné Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Par défaut
    Suite à cette recherche, mon mentor m'a expliqué certaines choses vraiment balèze.. notamment à propos du bind
    Me voilà moins bête.

    Fin bon.. comme dirait SpaceFrog :
    Citation Envoyé par SpaceFrog
    Deux règles du succès:
    1) Ne communiquez jamais à quelqu'un tout votre savoir...

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

Discussions similaires

  1. [Débutant] une boucle for me rend fou.
    Par SirDarken dans le forum Langage
    Réponses: 6
    Dernier message: 12/09/2006, 23h25
  2. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 19h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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