を持ってjQueryのカート機能は、私がこのJSFiddle持っているいくつかのわずかな問題
- 私はカートに追加すると、それが正常に動作しますが...私が別の商品を追加すると、カートアイテムをSKUで更新してQTYを増やすのではなく、新しいアイテムとして追加します
- カートのカート額と価格を更新しますbあなたが変わっていない別のものを追加したら、私はこれを更新して解決することに苦労しています。 @MikeCが指摘
を持ってjQueryのカート機能は、私がこのJSFiddle持っているいくつかのわずかな問題
として、あなたはsku
てオブジェクトを見つけることが、その後がない実際の変化をもたらしたことをプロパティに一致するsku
を割り当てました。
代わりにqty
を更新したようです。
また、return
ステートメントは$.each
コールバックの内側にあるため、$.each
以下のコードは実行されません。
ECMAScript 6には、多くの新しいArrayメソッドが用意されています。その1つは.find()
です。私はそれを使用して、配列内のオブジェクトを探し、それが見つかった場合はそれを更新するか、そうでなければ新しい項目をプッシュすることをお勧めします。
function addToBasket(title, sku, price, image, qty) {
// update sku if product is already present
var product = basket.find(function (prod) {
return prod.sku === sku
})
if (product) { // found an object, so update it with the new quantity
product.qty = qty
} else { // no object found, so create a new object
basket.push({ title: title, sku: sku, price: price, image: image, qty: qty });
}
saveBasket();
}
.find()
へのコールバックの戻り値は、配列内の現在のアイテムは、あなたがしたい1であるか否かを判定する。 true
(または真実の値)を返すと、反復が停止し、そのオブジェクトが返されます。真理値を返す項目がなければ、undefined
が返されます。
ループの後、オブジェクトが見つかった場合は更新し、そうでなければ新しいオブジェクトを作成します。
旧式のブラウザには、.find()
をパッチする必要があります。私がリンクしているMDNドキュメントには、ポリフィルがあります。
事前に助けてくれてありがとう!私はちょうどそれを行った...それは予想通りにバブルの価格と量を更新する...私はミニカーを見るためにリフレッシュし、それが表示されますが、私はその後、バスケットに追加すると再び動作しないと私はコンソールで見る:定義されていない - 任意のアイデア?おかげで再び仲間! – James
@James: 'prod'はコールバック内でのみ利用可能です。それがエラーの場合は、 'basket'に空の(null/undefined)項目があるかもしれません。 ... 'return prod && prod.sku === sku'を試してください –
私は前にprodを使いませんでした。配列内のすべてがproductで、次にproduct.image、product.sku、product.price、product.qtyなどがあります。 – James
'product'はオブジェクトでありインデックスではありません。ちょうど 'if(product.sku === sku)'を実行してください。また、 'product.sku'を' sku'に割り当てることには、あなたがすでにif条件で同じであることを確立しているので、何のポイントもありません。 –
@MikeC:jQueryの最初のパラメータはインデックスだと思います。 –
@squintダング、そうです。それは他のすべてから後方にある。さて、「sku」を再割り当てすることについてのビットは依然として立っています。 –