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 :

problème très étrange avec mes tableaux


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 145
    Points : 194
    Points
    194
    Par défaut problème très étrange avec mes tableaux
    j'avais posté pour un problème similaire que je pensais résoudre en passant par des tableaux associatifs d'où le délestage .

    présentation du sujet :
    je définie un tableau
    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
     
    var tab_gene=new Array;
     tab_gene["candidat"]=new Array; // tableau du candidat
     tab_gene["groupe"]=new Array; // tableau du groupe
     tab_gene["projet"]=new Array; // tableau du projet
     tab_gene["client"]=new Array;// tableau du client
     //
     tab_gene["candidat"]["social"]=new Array; //social du candidat
     tab_gene["candidat"]["social"][0]=0;
     tab_gene["candidat"]["reel"]=new Array;//reel du candidat
     tab_gene["candidat"]["reel"][0]=0;
     tab_gene["candidat"]["pro"]=new Array;//pro du candidat
     tab_gene["candidat"]["pro"][0]=0;
     tab_gene["candidat"]["pro"][1]=0;
     tab_gene["candidat"]["prive"]=new Array;//prive du candidat
     tab_gene["candidat"]["prive"][0]=0;
     tab_gene["candidat"]["prive"][1]=0;
     //
     tab_gene["groupe"]["social"]=new Array; //social du candidat
     tab_gene["groupe"]["social"][0]=0;
     tab_gene["groupe"]["social"][1]=0;
    ...
     tab_gene["client"]["pro"]=new Array;//pro du candidat
     tab_gene["client"]["pro"][0]=0;
     tab_gene["client"]["pro"][1]=0;
     tab_gene["client"]["prive"]=new Array;//prive du candidat
     tab_gene["client"]["prive"][0]=0;
     tab_gene["client"]["prive"][1]=0;
    ce tableau correspond à l'existance de claques dont leur affichage doit être géré dynamiquement.

    pour cela, j'ai deux menu.
    le premier est :candidat, groupe, projet, client
    il sert à sélectionner un ensemble de calques
    le second est, comme vous vous en doutez : reel, social , pro et prive

    par les menus en sélectionnant donc groupe et pro, on doit afficher uniquement les calques pro du groupe.
    vu que IE ne gère pas les Name sur les div, il faut que je passe par Id qui doit être unique (normal), d'où mon tableau.

    pour contrôler l'affichage, j'ai 3 fonctions
    une pour remettre à l'invisible
    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
     
    function raz_cand(candi,nom_tab){
    var ii;
    var tab;
     
    for (ii=0; ii<candi[nom_tab]["reel"].length; ii++)//reel
    			{tab=nom_tab+"_reel_"+[ii];
    			document.getElementById(tab).style.visibility='hidden';
    			document.getElementById(tab).style.display='none';}
    for (ii=0; ii<candi[nom_tab]["social"].length; ii++)//social
    			{tab=nom_tab+"_social_"+[ii];
    			document.getElementById(tab).style.visibility='hidden';
    			document.getElementById(tab).style.display='none';}
    for (ii=0; ii<candi[nom_tab]["prive"].length; ii++)//prive
    			{tab=nom_tab+"_prive_"+[ii];
    			document.getElementById(tab).style.visibility='hidden';
    			document.getElementById(tab).style.display='none';}
    for (ii=0; ii<candi[nom_tab]["pro"].length; ii++)//pro
    			{tab=nom_tab+"_pro_"+[ii];
    			document.getElementById(tab).style.visibility='hidden';
    			document.getElementById(tab).style.display='none';}	
    }
    une pour gérer le 1er menu dit général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function menugene(tablo,nom){
      raz_cand(tablo,selection);
     selection=nom;
    }
    elle sert à donner le nom de l'ensemble général de calques, par exemple ceux du groupe et à faire un raz de l'ancien affichage.

    la dernière est l'affichage à proprement parlé que j'appelle sur le click du sous-ensemble par exemple pro
    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
     
    function menuclik(param,candid,nom) {
    var tabs;
         raz_cand(candid,nom);
    	if(param=="all"){
    		for (var i=0; i<candid[nom]["reel"].length; i++)
    			{tabs=nom+"_reel_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}
    		for (var i=0; i<candid[nom]["social"].length; i++)
    			{tabs=nom+"_social_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}
    		for (var i=0; i<candid[nom]["prive"].length; i++)
    			{tabs=nom+"_prive_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}
    		for (var i=0; i<candid[nom]["pro"].length; i++)
    			{tabs=nom+"_pro_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}}
     
    	if(param=="reel"){
    		for (var i=0; i<candid[nom]["reel"].length; i++)
    			{tabs=nom+"_reel_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}}
     
    	if(param=="social"){
    		for (var i=0; i<candid[nom]["social"].length; i++)
    			{tabs=nom+"_social_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}}
     
    	if(param=="prive"){
    		for (var i=0; i<candid[nom]["prive"].length; i++)
    			{tabs=nom+"_prive_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}}
     
    	if(param=="pro"){
    		for (var i=0; i<candid["candidat"]["pro"].length; i++)
    			{tabs=nom+"_pro_"+[i];
    			document.getElementById(tabs).style.visibility='visible';
    			document.getElementById(tabs).style.display='block';}}	
    }

    Le problème :
    bin c'est que ça marche bien sous firefox, j'ai aucune erreur.
    mais sous IE et opéra(sa console donne un peu plus d'informations) j'ai une erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (ii = 0;ii < candi[nom_tab]["reel"].length;ii++)
    et sous opera et sous IE j'ai une erreur disant que à la ligne 63, 'reel' n'est pas un objet ou nul or la ligne 63 est avant les définitions des fonctions et le tableau existe vu que firefox le reconnait.

    Personnellement, je comprend pas une telle différence de résultat en les différen ts navigateurs et surtout je ne vois pas comment y remédier.
    Si quelqu'un pouvait m'aider?...

  2. #2
    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 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    le problème de la longueur des tableaux associatifs à été abordé recemment ety javatwister nous a gratifié d'une solution dans les propositions de faq

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 145
    Points : 194
    Points
    194
    Par défaut
    j'ai résolu le problème.
    ce n'était pas la taille du tableau
    mais le pramètre "nom" dans la fonction "menuclik"
    IE et opéra le considérait comme un objet ou n'arrivait pas apparemment à accéder à sa valeur car null (chose byzarre vu qu'il ne l'est jamais donc problème certain de passage de paramêtre de fonctions en fonctions).
    en passant par la variable globale "selection", ça m'a permis de contourner le problème.
    Toutefois je me demande, quand même, pourquoi firefox y arrivait et les autres non.
    En tout cas merci de ton aide.

    ps: j'avais eu un problème de taille de tableau et à l'époque javatwister et toi me l'aviez résolu... qu'est ce que vous êtes fort quand même on voit bien l'expérience

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

Discussions similaires

  1. Problème très étrange avec MAX
    Par tintin72 dans le forum Requêtes
    Réponses: 7
    Dernier message: 07/11/2014, 17h29
  2. Réponses: 5
    Dernier message: 30/05/2012, 07h19
  3. [AC-2003] Problème très étrange avec Recordset ?
    Par [ZiP] dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/03/2010, 11h59
  4. Réponses: 5
    Dernier message: 12/07/2007, 10h07
  5. Problème très étrange...
    Par TitiFr dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/03/2005, 21h37

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