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 :

innerhtml dans une variable


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut innerhtml dans une variable
    Bonsoir à tous,

    j'ai un petit problème en js.
    je veux passer par une variable pour afficher un résultat dans une cellule.
    je fais ça et marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var y = myCell1.innerHTML; 
     
    y=i; 
     
    autre question: pour faire ca 
     
    a="mycell"+"1"+".innerHTML"; 
    a=i;
    comment faire?

    merci à tous



  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par nou366 Voir le message
    Bonsoir à tous
    Salut a toi
    Citation Envoyé par nou366 Voir le message
    ça marche pas
    Aïe Nous v'là beaux. C'est-à-dire ? Messages d'erreur ? *Evénement* inattendu ? *Non-événement* alors qu'il était attendu ? Nous sommes dans l'expectative.
    Citation Envoyé par nou366 Voir le message
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var y = myCell1.innerHTML; 
     
    y=i;
    1) D'où provient ce morceau de code ? D'un script dans la balise head ? D'un gestionnaire d'événement dans une balise du body ? Dans un fichier externe ? Ailleurs ?

    2) Etant donné le choix de l'extrait, nous ignorons tout des références à i et myCell1, notamment leur valeurs possibles.

    Citation Envoyé par nou366 Voir le message
    autre question
    J'ai du rater la première... ?

    Citation Envoyé par nou366 Voir le message
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a="mycell"+"1"+".innerHTML"; 
    a=i;
    A vue de nez tu essaies d'accéder à une variable dynamiquement, en constituant son identifiant dans une chaine pour l'utiliser ensuite. En l'occurrence il te manque un passage par la fonction eval() pour que ça fonctionne. (Par contre, c'est considéré comme une pratique de code dangereuse.)

    Citation Envoyé par nou366 Voir le message
    comment faire?
    Fais-nous déjà un message un peu plus informatif et il y aura plein de gens pour t'aider ^^

    A plus

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Salut !

    Il y a des histoires de références qui égarent plus d'un novice…
    Quand tu fais :
    La variable y prend la valeur du innerHTML. Ce qui se passe, c'est que le innerHTML (de type String) est copié puis stocké dans y. Si tu changes le innerHTML après ça, y ne changera pas.

    Ensuite, tu fais :
    Alors, la variable y prend la valeur i. Et innerHTML ne change pas, car il n'est pas concerné…

    Par contre, si tu fais :
    Là pas de problème.

    Les choses ne se comportent pas de la même manière quand elles sont à gauche ou à droite du =.
    Comme je l'ai dit plus haut, myCell.innerHTML est de type String. Quand tu fais , tu stockes une chaîne dans y.

    Par contre, myCell est de type Object, et si tu fais tu stockes une référence vers myCell dans y.
    Ensuite, tu peux faire :
    Ça marchera car y est désormais une référence vers myCell.


    Je sais que tu risques de ne pas comprendre tout de suite ce que j'essaye de t'expliquer. Ce qu'il faut retenir, c'est qu'il peut se passer deux choses quand tu fais y = x.
    => si x est un type primitif (nombre, chaîne, boolean) : il est copié dans y ;
    => si x est un type complexe (objet, fonction, array) : sa référence est passée à y.

    En fait selon moi, il faut avoir fait du C pour comprendre ce bordel. Mais ce n'est que mon point de vue ^^

    Allez, des exemples !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> x = [] // type Array
    []
    >>> y = x // passage de référence
    []
    >>> y[0] = 2
    2
    >>> x
    [2] // x a été modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> a = 12 // type Number
    12
    >>> b = a // copie de valeur
    12
    >>> b += 1
    13
    >>> a
    12 // a n'a pas été modifié
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    Merci d'essayer de m'aider.

    mon code js se trouve dans une balise head. Mycell dans mon code php.
    je récupere une valeur d'une <option> dans un <select>.
    et je désire créer un tableau avec un nombre de colonnes qui varient en fonction de l'option choisie.
    i = valeur choisie = nbr de colonnes

    Pour écrire dans une cellule, c'est bien mycell.innerhtml qu'il faut utiliser ou y 'a-t-il une autre façon ??

    Comment utiliser eval avec ce code:
    a="mycell"+"1"+".innerHTML";

    merci encore de m'aider

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

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

    tu peux nous poster ton code javascript généré ? Et nous dire précisément ce que tu souhaites faire car avec 2 lignes et demie de lignes de code par-ci par-là on n'ira pas loin....

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    voici

    var c=form5.list.options[form5.list.selectedIndex].value;
    var b=c.split('-');

    myCell1.innerHTML="";
    myCell2.innerHTML="";
    myCell3.innerHTML="";etc il peut y en avoir des dizaines


    if( typeof(b[1])!='undefined') myCell1.innerHTML=b[1]
    if( typeof(b[2])!='undefined') myCell3.innerHTML=b[2]
    if( typeof(b[3])!='undefined') myCell2.innerHTML=b[3]

    ="";etc il peut y en avoir des dizaines

    je veux éviter de répéter mycell1...10
    je sais pas si c'est claire

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    N'étant pas expert JS, je vais vais quand même essayer de te donner un coup de main. Il est vrai que tu fournis peu d'informations sur ton problème, en tout cas ce n'est pas très clair. Etant donné que ton code JS fait référence à de la manipulation DOM, un extrait de ton code HTML est nécessaire. Ce que tu veux faire reste flou. Tu veux générer le markup (balisage) HTML de ton tableau à la volée en JS ou tu as déjà le tableau HTML de pret dans ta page?

    Au vu de ton code, je pencherais pour la deuxième option en assumant que tu disposes d'une variable myCellX valide pour chacune de tes cellules de tableau que tu veux manipuler (Ceci dit, ça fais beaucoup, beaucoup de variables...), que la valeur stockée dans l'attribut value de tes options soit de la forme valCell1 - valCell2 - valCell3 (a cause du split).

    Pour répondre rapidement à ta question et en assumant que ton code marche:

    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
     
    /// D'où vient form5? Référence active à ton élement de formulaire?
    // list référence ta liste déroulante? (qui aurait un id list)
    // Pourquoi un split ici? La valeur stocké dans l'attribut html de tes <options>
    // est de la forme val1-val2-val3?
     
    var form5 = document.getElementById('form5'),
    myCell1 = document.getElementById('myCell1'),
    myCell2 = document.getElementById('myCell2'),
    myCell3 = document.getElementById('myCell3');
     
    var c = form5.list.options[form5.list.selectedIndex].value;
    // --> c = 'val 1-val 2-val 3'
    var b = c.split('-');
    // --> b = ['val1', 'val2', 'val3']
     
    // Assumons que b soit un tableau représentant chacune des valeurs de ton
    // tableau
     
    // D'ou viennent les référence myCell1 et ses copains? 
    // Tu as une variable pour chacune des cellules de ton tableau?
     
    // Crées toi un tableau contenant toutes tes myCell
    var myCells = [myCell1, myCell2, myCell3], tmp = "";
     
    // Aprés deux choix s'offrent à toi, en fonction de l'array sur lequel tu préfères ittérer.
    // Dans les deux cas, tu dois tester l'existance de la variable du tableau sur lequel tu n'itères pas (dans le premier cas pour éviter une référenceError, dans le second pour éviter de voir appliquer un toString sur la valeur undefined)
    /* */
    for (var i in b) {
        tmp = myCells [i];
        if(tmp) {
            tmp.innerHTML = b[i]
        }
    }
    /* */
     
    /* * /
    for (var i in myCells) {
        tmp = b[i]
        console.log(tmp);
     
        if(tmp) {
            myCells[i].innerHTML = tmp; 
        }
    }
    /* */
    Ceci dit, ce n'est vraiment pas une manière propre de procéder. N'hésites pas à nous fournir plus d'informations (markup HTML + code JS, cad ac ce qu'il faut comme contexte pour qu'on puisse t'aider), je suis sûr qu'il existe d'autres moyens de répondre à ton besoin.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    merci mdaniel, c'était exactement ce que je recherchais

    merci à vos tous d'être intervenus pour résoudre mon problème.

    j'ai bcp appris

    à bientôt

  9. #9
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Si les myCell sont des variables globales, on peut faire comme ça :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var myCells = [];
    for (var i = 0; i < nbCells; i++) {
        myCells[i] = window['myCell' + i];
    };

    C'est une alternative intéressante à eval().

    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. Stocker un noeud dans une variable
    Par Devotion dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 23/09/2004, 17h02
  2. [Sybase] résultat d'un select dans une variable
    Par stoz dans le forum Sybase
    Réponses: 2
    Dernier message: 14/09/2004, 14h28
  3. Résultat d'une requête dans une variable...
    Par Hoegaarden dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/04/2004, 13h51
  4. Réponses: 6
    Dernier message: 24/07/2003, 12h39
  5. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 14h56

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