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 :

DOM : attribuer / modifier dynamiquement un ID


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut DOM : attribuer / modifier dynamiquement un ID
    Bonjour à tous,

    Je rencontre un problème assez génant en javascript, et je ne comprend même pas comment est-ce possible ...

    J'ai un input qui possède un identifiant "PieceNouveau"

    En javascript je lui dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     document.getElementById('PieceNouveau').name='PieceNew';
     document.getElementById('PieceNouveau').id     ='PieceNew';
     document.getElementById('PieceNouveau').setAttribute('id','PieceNew');
    Et juste après je lui dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     alert(document.getElementById('PieceNouveau').id);
    Dans l'alert il me met : "PieceNew"

    Comment peut-il me mettre ça ? sachant que je l'appel par son Identifiant ...?

  2. #2
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut
    Bonjour,

    Je ne suis pas un spécialiste, mais je dirai à cause de l'instruction suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById('PieceNouveau').setAttribute('id','PieceNew');

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Tout d'abord, merci pour ta réponse,

    Mais en fait, ça je l'ai ajouté par la suite... car même sans cette ligne ça fonctionnait pas...

    Alors je me suis dis... on va tenter avec un setAttribute... mais même ça ne change rien !

  4. #4
    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
    Citation Envoyé par Protecteur59 Voir le message
    Comment peut-il me mettre ça ? sachant que je l'appel par son Identifiant ...?
    Bonne chance pour la lecture des codes sources !

    poses aussi la question pourquoi doit on permettre de modifier un identifiant ?

  5. #5
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    sous IE ?

    A+

  6. #6
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Que donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    document.getElementById('PieceNouveau').id = 'PieceNew';
     
    alert(document.getElementById('PieceNouveau').id);
     
    //Puis essayer:
    alert(document.getElementById('PieceNew').id);

  7. #7
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Heu ... ce n'est pas la peine d'essayer de faire fonctionner ce code.

    Il ne faut pas modifier (ou tenter de modifier) les id !!

    C'est une erreur d'analyse et/ou d'implémentation

    A+

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Les 2 alert me donne la même chose "PieceNew"

    Sinon, c'est bien sous IE.

    Et pourquoi avoir la possibilité de changer un ID?

    Tout simplement pour mon cas, c'est un logiciel client, il est entièrement développé en Javascript / Ajax / Php / Mysql

    Et ils peuvent ajouter plusieurs pièces... chaque fois qu'ils ajoutent une pièce, je recré une ligne en javascript "DOM", l'ancienne ligne doit modifier son ID avec l'identifiant SQL (pour permettre une modification)

  9. #9
    Invité
    Invité(e)
    Par défaut
    je vient de tester avec ce script (ff IE)

    aucunes raisons pour que sa marche pas

    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
    <<html> 
    <head> 
     
    <script language='javascript'> 
     
    function annoncerMonId(){ 
    document.getElementById('monId').setAttribute('id','PieceNew');
    if (document.getElementById('monId')){
    alert(document.getElementById('monId').id);
    }
    else{
    alert(document.getElementById('PieceNew').id); 
    }
    }
     </script> 
    </head> 
    <body> 
     
    <span id='monId' onClick='annoncerMonId();'>Bonjour</span> 
     
    </body> 
    </html>

  10. #10
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Protecteur59 Voir le message
    chaque fois qu'ils ajoutent une pièce, je recré une ligne en javascript "DOM", l'ancienne ligne doit modifier son ID avec l'identifiant SQL (pour permettre une modification)


    Il faut détruire l'objet existant, puis le récréer avec son nouvel id, ce qui n'est pas la même chose

    Pour tes alert() :
    1) l'attribution du name n'a pas dû fonctionner (cf. les post sur le sujet)
    2) dans ton alert(), IE fait en fait référence au name et non à l'id (il mélange les 2)

    Ce que tu constates est l'enchaînement de ces 2 points, amha

    A+

  11. #11
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Citation Envoyé par Protecteur59 Voir le message
    Et ils peuvent ajouter plusieurs pièces... chaque fois qu'ils ajoutent une pièce, je recré une ligne en javascript "DOM", l'ancienne ligne doit modifier son ID avec l'identifiant SQL (pour permettre une modification)
    Pq ne pas donner directement l'id SQL lors de la création de la pièce en DOM ? Et vous ne pouvez pas jouer sur les name plutôt que les id ?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Ok, merci beaucoup tout le monde,

    Au début j'étais parti pour détruire la ligne, mais je pensais que c'était possible sans passer par là


    Au moins j'aurai appris quelque chose, et il faut toujours se fier à sa première id... (idée pardon)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    très curieux...

    Comme si les ids étaient collectés sans être mis à jour par rapport au document.
    Un objet genre 'document.ids' dont les propriétés seraient les ids ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    je vient de tester avec ce script (ff IE)

    aucunes raisons pour que sa marche pas

    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
    <<html> 
    <head> 
     
    <script language='javascript'> 
     
    function annoncerMonId(){ 
    document.getElementById('monId').setAttribute('id','PieceNew');
    if (document.getElementById('monId')){
    alert(document.getElementById('monId').id);
    }
    else{
    alert(document.getElementById('PieceNew').id); 
    }
    }
     </script> 
    </head> 
    <body> 
     
    <span id='monId' onClick='annoncerMonId();'>Bonjour</span> 
     
    </body> 
    </html>

  15. #15
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Heu ... ce n'est pas la peine d'essayer de faire fonctionner ce code.

    Il ne faut pas modifier (ou tenter de modifier) les id !!

    C'est une erreur d'analyse et/ou d'implémentation

  16. #16
    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 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    accessoirement sous IE cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     document.getElementById('PieceNouveau').name='PieceNew';
    ne sert à rien...
    IE ne sait pas attribuer ou modifier un name dynamiquement (en runtime)

Discussions similaires

  1. [DOM] Récuperation valeur Select modifié dynamiquement sous Explorer
    Par camcam8782 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 31/03/2009, 10h49
  2. Modifier dynamiquement le style d'un textarea
    Par AlLutun dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/11/2004, 15h18
  3. Réponses: 7
    Dernier message: 25/10/2004, 10h59
  4. [Applet] Modifier dynamiquement la mise en page
    Par Amnesiak dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 28/09/2004, 11h49
  5. VertexBuffer d'un Mesh modifiable dynamiquement ?
    Par Imhotep dans le forum DirectX
    Réponses: 7
    Dernier message: 10/07/2004, 15h23

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