Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Zone texte HTML de type tableau de donnée's mail

4 réponses
Avatar
Arnaud
Salut à tous

Je voudrait lire / ecrire des Zones Texte HTML avec des noms de type
tableau[i] par exemple qui permettent des calcules traitables par boucle

document.form_commande.T[0].value = document.form_commande.P[0].value *
document.form_commande.Q[0].value;
document.form_commande.T[1].value = document.form_commande.P[1].value *
document.form_commande.Q[1].value;
document.form_commande.T[2].value = document.form_commande.P[2].value *
document.form_commande.Q[2].value;


Avec T = Total P = Prix Q = quantité


Hors à priori une zone texte HTML ne peux pas avoir un nom de forme tableau
: document.form_commande.T[1].value n'est pas possible. Seul un nom constant
de type document.form_commande.T1.value est possible

Y a t'il une alternative pour pointer un nombre varaible de zone avec un
pointeur ??? Rien trouvé sur le web ni dans mes bouqins ...

Cordialement

Arnaud

4 réponses

Avatar
SAM
Salut à tous

Je voudrait lire / ecrire des Zones Texte HTML avec des noms de type
tableau[i] par exemple qui permettent des calcules traitables par boucle


<script type="text/javascript">

function calc(num1, num2, op) {
num1 = num1*1;
num2 = num2*1;
var num = op==1? num1*num2 : num1+num2;
return Math.round(num*100)/100;
}

function calcul() {
var total = 0, Arts = 0, P, Q, E;
// Hop! les rangées des commandes du tableau
var T = document.getElementById('tabl');
T = T.getElementsByTagName('TBODY')[0];
T = T.getElementsByTagName('TR');
// boucle sur ces rangées
for(var i=0; i<T.length; i++) {
// hop! les cellules de la rangée :
P = T[i].getElementsByTagName('TD');
// hop! la quantité :
Q = P[2].getElementsByTagName('INPUT')[0].value;
// si quantité alors calcul et affichage rangée
if(Q != '' && Q.length>0) {
Q = Q.replace(',','.')*1; // conversion chiffre Fr->US
E = calc(P[1].innerHTML.replace(',','.'), Q, 1);
total += E;
Arts += Q;
P[3].innerHTML = E.toString().replace('.',',') + ' Euros';
}
}
// la partie résultats
// si y a qque chose commandé
if(Arts >0 ) {
// les rangées du tFoot
T = document.getElementById('tabl');
T = T.getElementsByTagName('TFOOT')[0];
T = T.getElementsByTagName('TR');
E = T[0].getElementsByTagName('TH')[1];
E.innerHTML = calc(total, 1, 1).toString().replace('.',',') +
' Euros';
P = T[1].getElementsByTagName('TD');
P[2].innerHTML = Arts;
Q = calc(Arts, P[1].innerHTML.replace(',','.'), 1);
P[3].innerHTML = Q.toString().replace('.',',') + ' Euros';
E = T[2].getElementsByTagName('TH')[1];
E.innerHTML = calc(total, Q, 2).toString().replace('.',',') +
' Euros';
return true;
}
return false;
}

function RAZ() {
var T = document.getElementById('tabl');
T = T.getElementsByTagName('TBODY')[0];
T = T.getElementsByTagName('TR');
for(var i=0; i<T.length; i++) {
T[i].getElementsByTagName('TD')[3].innerHTML = '';
}
T = document.getElementById('tabl');
T = T.getElementsByTagName('TFOOT')[0];
T = T.getElementsByTagName('TR');
T[0].getElementsByTagName('TH')[1].innerHTML = '';
T[2].getElementsByTagName('TH')[1].innerHTML = '';
T = T[1].getElementsByTagName('TD')
T[3].innerHTML = T[2].innerHTML = '';
return false;
}
</script>
<style type="text/css">
table { empty-cells: show }
table td input { width: 30px }
</style>
</head>
<body>

<form action"blabla.php" onsubmit="return calcul()">
<table id="tabl" border=1>
<caption>Commande Macs Ordinosaures</caption>
<thead>
<tr>
<th>intitulé</th><th>Prx U</th><th>Quant</th><th>Ss-Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Mac 7600</td><td>36,55</td><td><input name="Q1"></td><td></td>
</tr>
<tr>
<td>Mac 7200</td><td>31,85</td><td><input name="Q2"></td><td></td>
</tr>
</tbody>
<tfoot>
<tr><th colspan=3>Sous-total Commande :</th><th></th></tr>
<tr><td>Frais de port</td><td>12,90</td><td></td><td></td></tr>
<tr><th colspan=3>Total Commande :</th><th></th></tr>
<tfoot>
</table>
<input type=submit><input type=reset onclick="RAZ()">
</form>


Hors à priori une zone texte HTML ne peux pas avoir un nom de forme tableau
: document.form_commande.T[1].value n'est pas possible. Seul un nom constant
de type document.form_commande.T1.value est possible


si on préfère avec les ID :

var num1 = num2 = total = num = articles = 0, T;
var TR = document.form_commande.getElementsByTagName('TR');
for(var i=1; i<TR.length-3; i++) {
num1 = document.getElementById('Q_'+i).value*1;
// ou :
// num1 = document.form_commande['Q_'+i].value*1;
num2 = document.getElementById('P_'+i).innerHTML.replace(',','.')*1;
num = Math.round(num1*num2*100)/100;
total += num;
articles += num1;
T = document.getElementById('T_'+i);
T.innerHTML = num.toString.replace('.',',')+' euros';
}

<form>
<table>
<tr>
<td>intitulé</td>
<td>prix U</td>
<td>quantité</td>
<td>sous-total</td>
</tr>
<tr>
<td>blabla 1</td>
<td id="P_1">3,55</td>
<td><input name="Q_1" id="Q_1"></td>
<td id="T_1">... euros</td>
</tr>
<tr>
<td>blabla 2</td>
<td id="P_2">325,75</td>
<td><input name="Q_2" id="Q_2"></td>
<td id="T_2">... euros</td>
</tr>
...

Y a t'il une alternative pour pointer un nombre varaible de zone avec un
pointeur ???


le nombre variable sera le nombre de TR

--
sm

Avatar
YD
Je voudrait lire / ecrire des Zones Texte HTML avec des noms de type
tableau[i] par exemple qui permettent des calcules traitables par boucle

document.form_commande.T[0].value = document.form_commande.P[0].value *
[...]

Hors à priori une zone texte HTML ne peux pas avoir un nom de forme tableau
: document.form_commande.T[1].value n'est pas possible. Seul un nom constant
de type document.form_commande.T1.value est possible

Y a t'il une alternative pour pointer un nombre varaible de zone avec un
pointeur ??? Rien trouvé sur le web ni dans mes bouqins ...


Stéphane t'a donné une réponse possible... Mais plus simplement,
si tu donnes le même attribut name à des éléments de formulaire
(mettons name="T"), tu récupéreras par script un tableau où les
éléments seront indicés selon leur ordre d'apparition dans la
page HTML (donc document.form_commande.T[0] désignera le premier
élément nommé T dans la page).

Exemple minimal :

<html><head><title></title>
<script type="text/javascript">
function test(){
var f = document.forms[0];
var m = "T[0] = "+f.T[0].value;
m += "nT[1] = "+f.T[1].value;
m += "nT[2] = "+f.T[2].value;
alert(m);
}
</script>
</head>
<body>
<form onsubmit="return false;">
<input type="text" name="T">
<input type="text" name="T">
<input type="text" name="T">
<button onclick="test()">Test...</button>
</form></body></html>

--
Y.D.

Avatar
Arnaud
10 000 merci à vous deux ...

Le solution de YD fonctionne à merveille quand à la solution de SAM je vais
l'étudier de pret car je n'ai pas encore le niveau suffisant en javascript
pour l'utiliser tel que ...

Cordialement

Arnaud


"Arnaud" <clerget_aclub-internet.fr> a écrit dans le message de news:
47ef9e5c$0$21144$
Salut à tous

Je voudrait lire / ecrire des Zones Texte HTML avec des noms de type
tableau[i] par exemple qui permettent des calcules traitables par boucle

document.form_commande.T[0].value = document.form_commande.P[0].value *
document.form_commande.Q[0].value;
document.form_commande.T[1].value = document.form_commande.P[1].value *
document.form_commande.Q[1].value;
document.form_commande.T[2].value = document.form_commande.P[2].value *
document.form_commande.Q[2].value;


Avec T = Total P = Prix Q = quantité


Hors à priori une zone texte HTML ne peux pas avoir un nom de forme
tableau : document.form_commande.T[1].value n'est pas possible. Seul un
nom constant de type document.form_commande.T1.value est possible

Y a t'il une alternative pour pointer un nombre varaible de zone avec un
pointeur ??? Rien trouvé sur le web ni dans mes bouqins ...

Cordialement

Arnaud






Avatar
SAM
10 000 merci à vous deux ...

Le solution de YD fonctionne à merveille


donc je n'ai absolument pas compris ce que tu appelais des
"Zones Texte HTML"
:-(
.. en fait, de bêtes champs de texte (text-field) (ou input text)

quand à la solution de SAM je vais
l'étudier de pret car je n'ai pas encore le niveau suffisant en javascript
pour l'utiliser tel que ...


Tu peux aussi bien jeter tt de suite.

"Arnaud" <clerget_aclub-internet.fr> a écrit dans le message de news:
47ef9e5c$0$21144$

Je voudrait lire / ecrire des Zones Texte HTML avec des noms de type
tableau[i] par exemple qui permettent des calcules traitables par boucle

Hors à priori une zone texte HTML ne peux pas avoir un nom de forme
tableau : document.form_commande.T[1].value n'est pas possible.