2016-12-26 4 views
-1

Ich arbeite mit einer Produktliste, in der ich ein Produkt in den Warenkorb hinzufügen möchte. aber leider funktioniert der Ajax-Code nur für den ersten Eintrag in der Liste. Oder der Code funktioniert, wenn ich auf die Detailseite gehe, auf der die Seite ein einzelnes Produkt enthält. Bitte schlage mir vor, was ich falsch mache.Ajax funktioniert nicht für eine Liste von Artikeln, sondern arbeitet für den ersten Artikel der Liste

$(document).ready(function(){ 
 
     $("#addToCart").click(function(){ 
 
      var productId = $("#productId").val(); 
 

 
      $.ajax({ 
 
       url:'<?php echo site_url('cart/addToCart/'); ?>', 
 
       data:{productId:productId}, 
 
       type:'POST', 
 
       success:function(data){ 
 
        // Change css value of "result" div and Display 
 
        $("#result2").css("display", "block"); 
 
        $("#result2").html(data); 
 
       } 
 
      }); 
 
     }); 
 
    });
<div class="icon"> 
 
<input type="hidden" id="productId" value="<?php echo $product->productId; ?>"> 
 
<a href="#" id="addToCart"><span class="glyphicon glyphicon-shopping-cart"></span></a> 
 
<span class="glyphicon glyphicon-copy"></span> 
 
</div>

+0

Was meinst du mit „funktioniert nicht“/„funktioniert nur für den ersten Eintrag in der Liste“? Sagen Sie, dass 'productId' immer der erste Eintrag in der Liste ist? Oder dass der AJAX-Anruf nur beim ersten Mal funktioniert? Oder, dass Sie viele Eingaben "id =" productId "haben, und dass nur das erste der Produkte funktioniert? –

+0

nur das erste der Produkte funktioniert –

Antwort

3

Sie verwenden ein id die addToCart Taste und id s nur auf einer Seite auf einem einzelnen Element verwendet werden kann, zum Ziel. Auf Seiten mit mehreren Produkten bedeutet dies, dass mehrere Elemente verwendet werden, die addToCartid verwenden.

Ändern Sie die addToCart ID in eine Klasse, und ändern Sie die Auswahlelemente entsprechend (z. B. $(.addToCart)).

1

Sie können nicht mehr als ein Element mit der gleichen ID haben. In Ihrem Fall haben Sie die gleiche ID sowohl für addToCart als auch productId.

Ich habe den folgenden Code so geändert, dass er für so viele Produkte funktioniert, wie auf der Seite aufgelistet sind. Er kann dies tun, indem das sibling Element zu finden, die die Produkt-ID:

// no-conflict safe "shorthand" document ready 
 
    jQuery(function($) { 
 
     // Access the button by class 
 
     $(".addToCart").click(function() { 
 
      // Find the sibling with the class productId 
 
      var productId = $(this).siblings(".productId").val(); 
 

 
      $.ajax({ 
 
       url:'<?php echo site_url('cart/addToCart/'); ?>', 
 
       data:{productId:productId}, 
 
       type:'POST', 
 
       success:function(data) { 
 
        // Change css value of "result" div and Display 
 
        $("#result2").css("display", "block"); 
 
        $("#result2").html(data); 
 
       } 
 
      }); 
 
     }); 
 
    });
<div class="icon"> 
 
<input type="hidden" class="productId" value="<?php echo $product->productId; ?>"> 
 
<a href="#" class="addToCart"><span class="glyphicon glyphicon-shopping-cart"></span></a> 
 
<span class="glyphicon glyphicon-copy"></span> 
 
</div>

+0

Vielen Dank. Es funktioniert gut. –

+0

@ I.Rasel Wenn das Problem dadurch gelöst wurde, sollten Sie die Antwort akzeptieren, indem Sie auf das Häkchen daneben klicken. – Barmar

Verwandte Themen