2

シナリオは次のとおりです。

ページを更新せずにカートに商品を追加するために、ajaxのカートへの追加拡張機能を使用しています。

そして、「+」と「-」のプラスとマイナスのボタン入力を追加する数量インクリメント機能を持つように list.phtml ファイルを変更しました。(ソース: http://jigowatt.co.uk/blog/magento-quantity-increments-jquery-edition/ )。

この問題は、2 つの異なる観察結果で説明されました。

1つ目/ +ボタン入力をクリックして数量を増やすと、入力ボックスで値が変化するので数量が正しく変更されますが、カートに追加ボタンをクリックすると、製品が1つしか追加されません. 何度+ボタンを押して欲しい数量を取得しても、カートに追加される数は常に1です.

2番目/数量ボックスに希望の数量を手動で入力すると、たとえば5と問題ありません。カートは5つのアイテムで更新されます。

したがって、基本的にインクリメントボタン + をクリックした場合のみ、アイテムの数は追加されず、1 つだけ追加されます。

インクリメント機能を追加し、+ ボタンと - ボタンを追加するコードは次のとおりです。

jQuery("div.quantity").append('<input type="button" value="+" id="add1"    class="plus" />').prepend('<input type="button" value="-" id="minus1" class="minus" />');
jQuery(".plus").click(function()
{
var currentVal = parseInt(jQuery(this).prev(".qty").val());

if (!currentVal || currentVal=="" || currentVal == "NaN") currentVal = 0;

jQuery(this).prev(".qty").val(currentVal + 1);
});

jQuery(".minus").click(function()
{
var currentVal = parseInt(jQuery(this).next(".qty").val());
if (currentVal == "NaN") currentVal = 0;
if (currentVal > 0)
{
jQuery(this).next(".qty").val(currentVal - 1);
}
});

ここで、リスト.phtml の数量入力ボックスで ajax のカートに追加ボタンを機能させるには、いくつかの変更を行う必要がありました (ソース: http://forum.aheadworks.com/viewtopic.php?f=33&t=601 ) 。

置き換える必要がある元のコードは次のとおりです。

<!-- Find this block of code: -->
<?php if($_product->isSaleable()): ?>
<button type="button" class="button" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
<?php else: ?>

上記のフォーラム リンクで説明されているように、以下のコードに置き換える必要があります。

<!-- And replace it with this block of code: -->
<?php if($_product->isSaleable()): ?>
<script type="text/javascript">
function setQty(id, url) {
var qty = document.getElementById('qty_' + id).value;
document.getElementById('cart_button_' + id).innerHTML = '<button type="button" class="button" onclick="setLocation(\'' + url + 'qty/' + qty + '/\')"><span><span>Add to Cart</span></span></button>';   
}
</script>
<label for="qty"><?php echo $this->__('Qty:') ?></label>
<input type="text" name="qty_<?php echo $_product->getId(); ?>" id="qty_<?php echo $_product->getId(); ?>" maxlength="12" value="1" onkeyup="setQty(<?php echo $_product->getId(); ?>, '<?php echo $this->getAddToCartUrl($_product) ?>');" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
<span id="cart_button_<?php echo $_product->getId(); ?>"><button type="button" class="button" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></span> 
<?php else: ?>

値を手動で入力した場合にのみ、カートに追加された数量が正しい理由がわかりません。+ (プラス) または - (マイナス) ボタンを使用する場合も、正しい数量をカートに追加する必要があります。何らかの理由で入力ボックスで数量が変更されますが、この値は、カートに追加をクリックした後のカート内の値ではありません (常に 1 つの製品がカートに追加されます)。

この問題の原因は何ですか? そして、これを解決するための解決策は何ですか? 今日の午後ずっと試してきたので、これを理解し、修正したいと思います。どうもありがとう。

4

2 に答える 2

2

これをコメントとして入れるつもりでしたが、見やすいようにフォーマットする必要があります

Google Chrome でページを開き、開発者ツールを使用していくつかのことを行うことをお勧めします。

  1. スクリプト パネルを使用して jQuery コードをステップ実行します。コードが数量を正しく設定していることを確認できます。

  2. Ajax 経由のリクエストが正しいことを確認してください。これを行うには、[ネットワーク] パネルを見て、Ajax 呼び出しを特定し、コントローラーに送られる数量値が正しいことを確認します。

個人的には、setQty 関数が + (プラス) & - (マイナス) ボタンによって起動されていること、または少なくとも setQty 関数がプラス & マイナス ボタンと同じことを行っていることを確認します。

あなたが投稿したコードから、setQty関数のこの行がプラスとマイナスのボタンコードで必要になる可能性があるようです

document.getElementById('cart_button_' + id).innerHTML = '<button type="button" class="button" onclick="setLocation(\'' + url + 'qty/' + qty + '/\')"><span><span>Add to Cart</span></span></button>'; 
于 2012-08-16T22:02:42.463 に答える