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

Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 20 mai 2008 à 13:58 - Dernière réponse : Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
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 .
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Zobibol
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Dernière intervention
20 février 2017
- 20 mai 2008 à 15:56
3
Merci
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]

Merci Zobibol 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Zobibol
maelob
Messages postés
944
Date d'inscription
mardi 14 novembre 2006
Dernière intervention
7 août 2009
- 20 mai 2008 à 14:55
0
Merci
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)
Commenter la réponse de maelob
Zobibol
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Dernière intervention
20 février 2017
- 20 mai 2008 à 15:02
0
Merci
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]
Commenter la réponse de Zobibol
Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 20 mai 2008 à 15:21
0
Merci
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 .
Commenter la réponse de Cr30s
Zobibol
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Dernière intervention
20 février 2017
- 20 mai 2008 à 15:25
0
Merci
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]
Commenter la réponse de Zobibol
Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 20 mai 2008 à 15:36
0
Merci
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 ?!?
Commenter la réponse de Cr30s
Zobibol
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Dernière intervention
20 février 2017
- 20 mai 2008 à 15:38
0
Merci
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]
Commenter la réponse de Zobibol
Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 20 mai 2008 à 15:41
0
Merci
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 .
Commenter la réponse de Cr30s
Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 20 mai 2008 à 15:44
0
Merci
Ca donne ça :
    
        ----

                            
            ,
                            
            ,
                            
            ,
                            
            ,
                            
            ,
                            Supprimer
            ,
        
    
Commenter la réponse de Cr30s
maelob
Messages postés
944
Date d'inscription
mardi 14 novembre 2006
Dernière intervention
7 août 2009
- 20 mai 2008 à 15:47
0
Merci
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)
Commenter la réponse de maelob
Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 20 mai 2008 à 15:56
0
Merci
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 !!!
Commenter la réponse de Cr30s
Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 20 mai 2008 à 15:59
0
Merci
Comme ça ca devrait aller oui . Merci bien je pars avec ta fonction en poche . ++
Commenter la réponse de Cr30s
maelob
Messages postés
944
Date d'inscription
mardi 14 novembre 2006
Dernière intervention
7 août 2009
- 20 mai 2008 à 16:08
0
Merci
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)
Commenter la réponse de maelob
cs_bultez
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
- 20 mai 2008 à 16:36
0
Merci
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]
Commenter la réponse de cs_bultez
Cr30s
Messages postés
12
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
3 juin 2008
- 3 juin 2008 à 10:20
0
Merci
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
Commenter la réponse de Cr30s

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.