Je cherche une belle façon de faire ce qui suit, mais un gel du cerveau:Choisissez la meilleure combinaison
L'utilisateur peut ajouter (et supprimer ultérieurement) un type à un panier. Pour chaque ajout ou suppression, j'ai besoin de voir s'il y a un type supérieur dans la hiérarchie qui peut être suggéré à la place. Le type le plus élevé est préférable (note il a le même prix que le type avant-dernier mais b6 doit être préféré b5)
Exemples:
2 x type1 (100+100) -> 1 x type2
type1 + type3 (100+300) -> 1 x type4
type3 + type4 (300+400) -> 1 x type6 + 1 x type2
1 type6 + 1 type2 + 1 type1 -> 1 x type6 + 1 x type3
et ainsi de suite. Donc, si le total est 0, il suffit d'ajouter ce que l'on a cliqué sur
Sinon, vérifiez si le total plus le nouveau clic peut être résolu dans une meilleure combinaison en commençant par le haut. Si l'utilisateur refuse la suggestion, ignorez l'ajout. Code jusqu'à présent (marqué jQuery puisque le code l'utilise - carte et filtre sont les bienvenus) Je n'ai pas posté mes tentatives de recalc, puisque je veux éviter le X/Y problem.
var types= {
b1: {price:100,quantity:0},
b2: {price:200,quantity:0},
b3: {price:300,quantity:0},
b4: {price:400,quantity:0},
b5: {price:500,quantity:0},
b6: {price:500,quantity:0}
}
function getTotal() {
var total = 0;
$.each(types,function(typeId,type) {
total+=type.quantity*type.price;
});
return total
}
$(function() {
var cont = $("#container");
$.each(types,function(typeId,type) {
$('<button class="add" id="'+typeId+'add">Add to '+typeId+'<button><span id="'+typeId+'val">0</button><button class="remove" id="'+typeId+'remove">Remove from '+typeId+'</button><span id="'+typeId+'total">0</span><br/>').appendTo(cont);
});
$(".add").on("click",function() {
var id = this.id.replace("add",""),type=types[id];
type.quantity++;
var subTotal = type.quantity*type.price;
$("#"+id+"val").text(type.quantity);
$("#"+id+"total").text(subTotal);
$("#total").text(getTotal());
});
$(".remove").on("click",function() {
var id = this.id.replace("remove",""),type=types[id];
if (type.quantity>0) type.quantity--;
var subTotal = type.quantity*type.price;
$("#"+id+"val").text(type.quantity);
$("#"+id+"total").text(subTotal);
$("#total").text(getTotal());
});
});
Donc, si un utilisateur clique deux fois sur 'ajouter b1', vous voulez que le résultat affiche 0 pour b1 et 1 pour b2? – Malk
B6 et B5 ont un prix de 500 à la fois? Peut-être que b6 devrait avoir un prix de 600 (peut-être une faute de frappe de votre part)? Si non, que choisissons-nous alors? – ssBarBee
Non, hélas, pas de faute de frappe. B6 préféré. – mplungjan