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 :

syntaxe avec indice de tableau


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut syntaxe avec indice de tableau
    bonsoir

    en cherchant à nettoyer un peu mon code j'essaie d'utiliser les indices d'un tableau, en vain

    j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var strtable = new Array("genre","type","materiau");
    if ( (inscription.strtable[0]abstrait.checked) == false ) {
    }
    mais ça ne passe pas....

    en fait dans cet exemple je souhaitais récupérer la valeur "genre" pour la mettre dans strtable[0] pour qu'en fait ça corresponde à la chaine:
    inscription.genreabstrait.checked

    si quelqu'un voit d'où vient mon erreur de codage...

    merci

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 895
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 895
    Points : 16 358
    Points
    16 358
    Par défaut
    Et si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str = strtable[0] + "abstrait";
    et ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inscription.str.checked
    ?

  3. #3
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    bonjour

    c'est peut être un pb de conception mon souci...

    en fait j'ai 2 listes avec plusieurs items chacune

    et j'ai la valeur strtable qui change et la valeur stritem

    donc en gros j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var strtable = new Array("t1","t2","t3"); 
    var stritem = new Array("toto","tata","titi");
    donc ce que je voulais faire c'est utiliser des indices car mes valeurs dépendent de l'extraction de ma base de donnée....

    donc qqchose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (
    (inscription[strtable[0]+stritem[0]].checked) == false &&
    (inscription[strtable[0]+stritem[1]].checked) == false &&
    (inscription[strtable[0]+stritem[2]].checked) == false &&
    (inscription[strtable[0]+stritem[3]].checked) == false &&
    (inscription[strtable[1]+stritem[0]].checked) == false &&
    (inscription[strtable[1]+stritem[2]].checked) == false &&
    etc...
    ) {}
    mais ça ne fonctionne pas...

    et du coup avec la syntaxe que tu me proposes ça m'oblige à générer autant de str que j'ai de cas...

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 895
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 895
    Points : 16 358
    Points
    16 358
    Par défaut
    Pas si tu utilises une boucle for ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var strtable = new Array("t1","t2","t3"); 
    var stritem = new Array("toto","tata","titi");
    var i;
    var j;
     
    for(i=0;strtable.length-1;i++){
       for(j=0;stritem.length-1;j++){
          ...inscription[strtable[i]+stritem[j]]...
       }
    }

  5. #5
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    le problème c'est que la syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str = strtable[0] + "abstrait";
    if ( (inscription.str.checked) == false ) ...
    ainsi que la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (inscription[strtable[0]+'abstrait'].checked) == false) ...
    ne passent pas...

    je n'ai pas de message d'erreur mais ma condition n'est pas vérifiée...

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 895
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 895
    Points : 16 358
    Points
    16 358
    Par défaut
    On peut avoir un peu plus de précision sur ton code HTML ?

    Et inscription, c'est quoi ? Comment est appelée ta fonction ?

  7. #7
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    inscription est le nom de mon formulaire et la fonction est appelée par un submit de validation

    le code html est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form name="inscription" id="inscription" method="get" action="#" onsubmit="return validateForm(this)">
    	<label for="genre" title="<?php echo $FORM_AJOUT_GENRE ?>" class="oblig">* <?php echo $AJOUT_GENRE ?> :</label>
    	<br/><br/>
    	<?php $objet="genre";include("php/requete_liste_formulaire.inc.php"); ?>
    	<input type="submit" name="valid" id="valid" value="S'inscrire" title="Cliquez sur ce bouton pour valider votre inscription" tabindex="17" />
    </form>
    la requête qui me permet d'avoir mes boutons à cocher est toute basique et elle renvoie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		echo '<td width="33%"><input type="checkbox" name="'.$tuple_sansblanc.'" id="'.$tuple_sansblanc.'" onfocus="this.className=\'focus\';" onblur="this.className=\'normal\';"/>'.$tuple.'</td>'
    ;

    donc des lignes sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <label for="genre" title="Veuillez saisir le(s) genre(s) vous caractérisant le mieux" class="oblig">* Genre :</label>
    <table width='400' align='center' border='0'>	<tr><td width="33%"><input type="checkbox" name="genreabstrait" id="genreabstrait" onfocus="this.className='focus';" onblur="this.className='normal';"/>abstrait</td></tr>
    et le programme js qui me pose probème est:
    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
    function validateForm(form) {
    	if (coche(form)) {
    		return true;
    	}
    return false;
    }
     
    function coche(inscription) {
    	var strtable = new Array("genre","type","materiau");
    	if ( (inscription.genreabstrait.checked) == false ) 	{
    		alert("Veuillez choisir un genre");
    		setTimeout("focusElement('inscription','genreabstrait')", 0);
    		return false;
    	} else {
    		return true;
    	}
    }

    tout ça fonctionne très bien (lorsque j'utilise la syntaxe inscription.genreabstrait.checked )

    mais si je veux utiliser des indices de tableau ça ne fonctionne plus...

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 895
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 895
    Points : 16 358
    Points
    16 358
    Par défaut
    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
    function validateForm(form){  
       if (coche(form)) {  
           return true;
       }
       return false;
    }   
     
    function coche(inscription) {  
       var strtable = new Array("genre");
       var stritem = new Array("abstrait");
       var i=0;
       var j=0;   
       var termine=false;
       while(i<=strtable.length-1 && termine==false){  
          while(j<=stritem.length-1 && termine==false){  
             if ((document.getElementById(strtable[i]+stritem[j]).checked) == false){  
                j++;
             }
             else{
                termine=true;
             }
          }
          i++;
          j=0;
       }
       if(termine==false){
          alert("Veuillez choisir un genre");
          return false;
       }
       else{
          return true;
       }
    }

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form name="inscription" id="inscription" method="get" action="#" onsubmit="return validateForm(this)">
       <label for="genre" title="Veuillez saisir le(s) genre(s) vous caractérisant le mieux">* Genre :</label>
       <input type="checkbox" name="genreabstrait" id="genreabstrait" /> abstrait
       <input type="submit" name="valid" id="valid" value="S'inscrire" title="Cliquez sur ce bouton pour valider votre inscription" tabindex="17" />
    </form>

  9. #9
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    if ( (document.forms["inscription"].elements[strtable[0]+"abstrait"].checked) == false )

  10. #10
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 895
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 895
    Points : 16 358
    Points
    16 358
    Par défaut
    Citation Envoyé par Matthieu2000
    if ( (document.forms["inscription"].elements[strtable[0]+"abstrait"].checked) == false )
    Mais il faut créer cette ligne pour chaque élément.
    Alors qu'une boucle c'est générique.

  11. #11
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    merci beaucoup...
    cela fonctionne très bien

    j'ai rajouté le focus sur mes checkbox en cas d'oubli de clik sur une valeur

  12. #12
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    j'ai continué sur le script et je me heurte encore à un problème...

    j'ai ajouté un input hidden qui me donne la liste des valeurs sur lesquelles je veux travailler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='hidden' name='liste_valeur' value='<?php include("php/requete_liste_genre.inc.php") ?>'/>
    qui après execution me donne:
    "a","b","c","d"

    du coup dans le javascript j'ai ajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var stritem = new Array(document.forms['inscription'].liste_valeur.value);
    à la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var stritem = new Array("abstrait");
    ça ne marche plus...

    et pourtant lorsque je remplace par un alert:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(document.forms['inscription'].liste_valeur.value);
    j'obtiens bien "a","b","c","d" ...

    j'ai mis une bêtise dans la description de mon tableau?
    ce n'est pas comme ça que je dois procéder pour récupérer dans un JS une liste de valeurs venant d'une BD?

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

Discussions similaires

  1. Tableau avec indice commençant à 1
    Par proc02 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/02/2014, 08h21
  2. syntaxe avec le tableau associatif
    Par n3x1n² dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 03/05/2011, 15h11
  3. Indicer un tableau avec une chaine de caractères
    Par petdelascar dans le forum C
    Réponses: 10
    Dernier message: 08/11/2007, 14h55
  4. Tableau de sommet avec indices
    Par casafa dans le forum OpenGL
    Réponses: 1
    Dernier message: 24/10/2006, 13h37
  5. [Conception] Erreur de syntaxe avec un champ de tableau
    Par lodan dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/09/2006, 11h45

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