1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| <script type="text/javascript">
//Cette fonction execute fun sur chacun des élements du tableau
function forEach(array,fun,offSet,Limit,thisp) {
var i;
var j = 0;
var start = offSet || 0;
var stop = Limit || array.length;
for(i = start; i < stop; i++,j++) {
fun(array[i], thisp);
}
}
window.onload = function() {
var product = document.getElementById('produits');
var productLines = product.getElementsByTagName('tr');
var chooseType = document.getElementById('chooseType');
var typeChoice = chooseType.getElementsByTagName('input');
var choiceDisplay = document.getElementById('lechoix');
var basePrice = (typeChoice[0].checked == true) ? "standard" : "bio";
var totalItems = [];
var totalPrice = document.getElementById('le_total');
//Retourne un chiffre à deux decimales
function getRNumber(text) {
return parseFloat(text).toFixed(2);
}
//On ajoute les totaux, et on modifie le grand Total
function computeTotal() {
var total = 0;
//Pour chaque total
forEach(totalItems,addPrice);
//On ajoute la valeur dans un chiffre
function addPrice(el) {
total += parseFloat(el.value);
}
//On l'injecte dans le total du bas
return getRNumber(total);
}
//Calcule le total d'une ligne
function computeLine(el) {
//L'élement ciblé
var content;
//On passe dans le cas ou le prix est changé via un changement de base
if(this == window) {
content = el.inputs[0];
} else {
content = this;
}
//Le multiplier c'est le nombre d'éléments, et le price c'est la base de prix qu'on se fixe (normal ou bio).
var multiplier = getRNumber(content.value);
var price = content.line.prop[basePrice];
//Le total présumé
var assumedTotal = getRNumber(multiplier*price);
//Si ce n'est pas un nombre (par exemple on entre des lettres dans le champs), on affiche zéro
var itemTotal = isNaN(assumedTotal) ? 0 : assumedTotal;
content.lineTotal.value = itemTotal;
//On update le prix total
totalPrice.value = computeTotal();
}
function attachProperties(el) {
//On crée un objet qui contient nos propriétés custom
el.prop = {};
el.prop.type = el.cells[0].innerHTML;
el.prop.standard = getRNumber(el.cells[1].innerHTML);
el.prop.bio = getRNumber(el.cells[2].innerHTML);
//On récupère les inputs de la ligne
var inputs = el.getElementsByTagName('input');
el.inputs = inputs;
//On accroche une fonction qui s'execute à la frappe de touche
inputs[0].onkeyup = computeLine;
//On fait une référence à la ligne.
inputs[0].line = el;
//On fait une référence au input de total
inputs[0].lineTotal = inputs[1];
totalItems.push(inputs[1]);
}
function updateChoice(el) {
el.onclick = function() {
basePrice = choiceDisplay.value = this.value;
forEach(productLines,computeLine,1,productLines.length-1);
}
}
//On itère sur les lignes du tableau en sautant la dernière et la première, et on les type avec attachProperties.
forEach(productLines,attachProperties,1,productLines.length-1);
forEach(typeChoice,updateChoice);
}
</script> |
Partager