Cr30s
Messages postés12Date d'inscriptionjeudi 6 avril 2006StatutMembreDernière intervention 3 juin 2008
-
20 mai 2008 à 13:58
Cr30s
Messages postés12Date d'inscriptionjeudi 6 avril 2006StatutMembreDerniè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) .
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 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 ???
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 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]
Cr30s
Messages postés12Date d'inscriptionjeudi 6 avril 2006StatutMembreDerniè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 .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 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 !
Cr30s
Messages postés12Date d'inscriptionjeudi 6 avril 2006StatutMembreDerniè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 ?!?
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 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 )
Cr30s
Messages postés12Date d'inscriptionjeudi 6 avril 2006StatutMembreDerniè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 .
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 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]...
.....
Cr30s
Messages postés12Date d'inscriptionjeudi 6 avril 2006StatutMembreDerniè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