[DOM] getAttribute('value') renvoie une chaine vide

Résolu
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008 - 20 mai 2008 à 13:58
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008 - 3 juin 2008 à 10:20
Bonjour à tous,


J'ai une boucle qui me permet de créer des lignes de tableaux grâce au
DOM . Dans chaque cellule se trouve un input identifié par un id unique
et généré de la manière suivante : 'ref_'+compteur de ma boucle,
'description_'+compteur, etc ...


Le problème est que lorsque je récupère la valeur des ces champs avec
la méthode getAttribute('value'), j'obtiens la valeur pour tous les
champs instanciés lors de ma boucle mais pas celles dont les inputs
sont en "édition libre".

Concrètement, j'ai 3 champs ref,description et prix qui fonctionnent
parfaitement, mais le dernier : serial, est renseigné par l'utilisateur
. Et lorsque j'utilise getAttribute('value'), j'obtiens les valeurs de
ref,description et prix mais pas celle de serial .


Code utilisé pour générer l'input serial :

for(var i = 0; i < 6; i++) {
if ( i != 4){
                var inp = document.createElement("input");
                inp.setAttribute("readonly","readonly");
                inp.setAttribute("type","text");
                }

if (i == 3){inp.setAttribute("id","serial_"+fieldcount_materiel);
                inp.removeAttribute("readonly");
                inp.setAttribute("value","");
                cell.appendChild(inp);
                }
}


Code utilisé pour récupérer la valeur de serial :
var elemdiv = document.getElementById('materiel');
var children = elemdiv.childNodes;

for(var i = 1;i< children.length;i++){
tmp2 += children[i].childNodes[0].childNodes[0].childNodes[3].childNodes[0].getAttribute('value')+' |||| ';
}


J'aimerais donc savoir si getAttribute ne récupère que les valeurs crées via le DOM apr la méthode setAttribute() ou si on peut l'utiliser pour récupérer la valeur comme le ferais un getElementById('serial').value ( chose que je ne peux faire dûe à la composition de mon tableau qui mélange plusieurs types d'id et qui ne sont pas forcément toutes présentes) .

Merci pour votre aide .

15 réponses

Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
20 mai 2008 à 15:56
aussi ça peu être une possibilité, mais j'en suis arrivé à cela

    <head>
    </head>
    <script>
        function getAllTableInformations(){
                var _table = document.getElementById("myTable");
                var full = new Array();
                var _tableRows = _table.rows;
                for ( var i =0; i <_tableRows.length; i++){
                        full.push(_tableRows[i].cells[0].getElementsByTagName("input")[0].value + _tableRows[i].cells[1].getElementsByTagName("input")[0].value + _tableRows[i].cells[2].getElementsByTagName("input")[0].value + _tableRows[i].cells[3].getElementsByTagName("input")[0].value);
                }
                for ( var i = 0; i <full.length; i++){
                        alert (full[i]);
                }
        }
        </script>
   
       
       
   
        ----

                           
           ,
                           
           ,
                           
           ,
                           
           ,
                           
           ,
                            Supprimer
           ,
       
   

</html>

Maintenant, est-ce que c'est le résultat attendu ???

[o-_-o]
3
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
20 mai 2008 à 14:55
Bonjour,
d'après selfHTML getAttribute récupere des info concernant le style sinon chaine vide
http://actuel.fr.selfhtml.org/archives/docu/7.0/tecbbaa.htm#a3
Apparement ça ne serait pas ce que tu veux...

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
0
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
20 mai 2008 à 15:02
bonjour, juste une petite question :
pourquoi ne pas stocker "serial_"+fieldcount_materiel dans une variable (voir un array )?
et ensuite
faire un document.getElementById(_idMaterial)
parce que cette écriture:
children[i].childNodes[0].childNodes[0].childNodes[3].childNodes[0].getAttribute('value')+
est complètement invivable !
[o-_-o]
0
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008
20 mai 2008 à 15:21
Tout d'abord merci maelob & Zobibol, j'ai lu l'article de selfHTML qui effectivement restreint l'utilisation aux seuls attributs de styles . Mais j'avais déjà regardé la spécification de getAttribute sur le site de MDC (http://developer.mozilla.org/fr/docs/DOM:element.getAttribute) où cette information n'est pas précisée . Ce qui m'étonne c'est que ça fonctionne quand même avec les autres valeurs des autres inputs .

En ce qui concerne l'utilisation d'un array, j'y avais pensé mais j'avoue ne pas me souvenir pourquoi je ne l'ai pas utilisée .
Dans mon tableau il est possible en cliquant sur un lien de faire un retour d'une pièce en SAV ce qui correspond en fait à l'insertion d'une nouvelle ligne dans mon tableau et pour laquelle l'id est sous la forme ref_sav_+compteur . Et donc il me semble que je n'utilise pas d'array car je dois conserver la position "physique" de la ligne insérée .

Par exemple :
ref_0
ref_1
ref_sav_0
ref_2
ref_sav_1

Et ça je ne peux pas en mettant dans des tableaux séparés ces identifiants retrouvé ensuite quelle pièce revenue en SAV est rattachée à la pièce d'origine .

Je vais quand même essayé de passer par un (plusieurs) array(s) mais cette histoire de getAttribute me chiffone quand même .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
20 mai 2008 à 15:25
pour savoir, c'est une table qui à 4 colonnes (TD)  ref,description et prix  et serial (et qui peux avoir n lignes (tr) ?
parceque si tel est le cas, tu pourrais parcourir les colonnes de ta table
la, plus besoin de savoir si c'est un retour ou pas !

[o-_-o]
0
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008
20 mai 2008 à 15:36
Effectivement c'est ça . Mais là tout de suite je ne vois pas ce que tu veux dire . Enfin je ne vois pas commetn le fait de parcourir par colonne et non par ligne peut m'aider ?!?
0
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
20 mai 2008 à 15:38
mon dieux, (oui bon, je me l'accorde celle la) ce que je suis idiot, je voulais dire ligne !
te serait-il possible de fournir le html obtenu (juste la table histoire de voir comme faire )

[o-_-o]
0
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008
20 mai 2008 à 15:41
Désolé je ne trouve pas comment éditer mon message précédent . J'ai oublié que je pouvais supprimer les lignes peut importe leur emplacement . C'est pour ça que je n'utilise pas de array parcequ'après je suis obligé de parcourir chaque array pour supprimer la référence correspondantes à la ligne supprimée . Sinon le getElementById me renverrait une erreur JS .

Du coup j'utilise un removeChild, ce qui est plus simple .
0
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008
20 mai 2008 à 15:44
Ca donne ça :
    
        ----

                            
            ,
                            
            ,
                            
            ,
                            
            ,
                            
            ,
                            Supprimer
            ,
        
    
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
20 mai 2008 à 15:47
En même temps que tu supprimes ta ligne tu peux supprimer l'entrée dans l'array.

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
0
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008
20 mai 2008 à 15:56
Bon ben il ne me reste plus qu'à remanier mon code, mais comme c'est assez lourd, je le ferrai plus tard . Merci à vous deux .

:reste toujous cette histoire de getAttribute !!!
0
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008
20 mai 2008 à 15:59
Comme ça ca devrait aller oui . Merci bien je pars avec ta fonction en poche . ++
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
20 mai 2008 à 16:08
De rien bon courage

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
20 mai 2008 à 16:36
Bonjour,


je suis loin d'avoir tout suivi....
   néanmoins :

 tableau.rows.length                                        nombre de lignes
 tableau.rows[n° ligne].cells.length                    nombre de colonnes dans la ligne
 tableau.insertRow(n° ligne)                             ajouter une ligne
 tableau.rows[n° ligne].insertCell(n° colonne)     ajouter une colonne dans la ligne
 tableau.deleteRow(n° ligne)                             détruire une ligne
 tableau.rows[n° ligne].deleteCell(n° colonne)     détruire une colonne dans la ligne

 tableau.rows[n° ligne].cell[n° colonne].???        accès à une cellule
(  tableau.rows[n° ligne].cell[n° colonne].innerHTML par exemple )
                l'input contenu tableau.rows[ligne].cell[colonne].firsChild...
                  ou même... en mettant le même name : 
                        document.name_formulaire.name_input[indice]...
.....





<hr />
                Cordialement            Bul         [mon Site]     [M'écrire]
0
Cr30s Messages postés 12 Date d'inscription jeudi 6 avril 2006 Statut Membre Dernière intervention 3 juin 2008
3 juin 2008 à 10:20
Bon alors pour ceux que ça peut intéresser j'ai bricolé une solution de fortune car c'était vraiment lours pour moi de modifier tout mon code . Par contre je l'ai épuré et plus besoin de la ligne avec les ChildNodes[0] enchainés .

Du coup lorsque je créer l'input "serial" grâce au DOM je fait un inp.setAttribute("onblur","saveValueOnLeave('serial_'+cpt)");

Et voici le code de cette fonction :

function saveValueOnLeave(serialID){
var input = document.getElementById(serialID);
input.setAttribute("value",input.value);
}

C'est de la bidouille mais ça me permet de faire ce que je veux
0
Rejoignez-nous