【问题标题】:Amount counter works only on first product金额计数器仅适用于第一个产品
【发布时间】:2022-01-18 15:39:04
【问题描述】:

我在使用带有 SQL 的 javascript 时遇到问题。 看起来我在屏幕上显示的项目很少,它们来自 SQL 数据库,代码看起来像所示。基本上,如果我在网站上展示的产品不止一种,那么只有第一种可以正常工作。有什么解决办法吗?

let displayAddCounter = document.querySelector("#add_count_cart");
let displayRemoveCounter = document.querySelector("#remove_count_cart");
let displayCounter = document.querySelector("#amount_count_cart");

var x = 0;

displayAddCounter.addEventListener("click", function(){
    if(x < 10){
    x++;
    displayCounter.innerHTML = x;
  } else {
    alert("If you want to buy more than 10, please contact our support! We will gladly help you :)")
  }
});

displayRemoveCounter.addEventListener("click", function(){
  if(x == 0){
    displayCounter.innerHTML = x;
  } else {
    x--;
    displayCounter.innerHTML = x;
  }
  
});

let buttonCartAdd = document.getElementById("btn_add_to_cart");
let itemName = document.querySelector(".product_name");

buttonCartAdd.addEventListener("click", function(){
    if(x == 0){
        alert("Please choose amount of items!");
    }
    else if(x > 0){
        alert("You added " + x + itemName.innerHTML + " to the cart!");
    }
  
});
 <?php
    $sql = "SELECT * FROM products";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        ?>
        <div class="product_card col-lg-4 col-md-6 col-sm-12 mb-4 box-shadow">
          <div class="card-header">
            <h3 class="product_name my-0 font-weight-light"> <?php echo $row["productName"]?> </h3>
          </div>
          <div class="card-body">
            <h2 class="card-title pricing-card-title"> </h2>
            <img class="pic" src="productsImages\<?php echo $row["productID"];?>.jpeg" height="150px" width="120px"></img>
            <br>
            <p>
            <?php echo $row["productPrice"];?> SEK
            </p>
            <div class="row amount_counter">
              <button id="remove_count_cart" type="button" class="col_amount btn btn-outline-secondary col-3 col"> - </button>
              <div id="amount_count_cart" class="btn col-6 col border-top border-bottom dark rounded h-75">
              0
              </div>
              <button id="add_count_cart" type="button" class="col_amount btn btn-outline-secondary col-3 col"> + </button>
              <button id="btn_add_to_cart" class="btn btn-lg btn-outline-success col-lg-8 col-md-12 col offset-lg-2"> Add <i type="button" class="fas fa-cart-plus"></i></button>
            </div>
          </div>
        </div>
      <?php
    }
    } else {
        echo "0 results";
    }
    $conn->close();
    ?>

【问题讨论】:

    标签: javascript sql


    【解决方案1】:

    您对每个产品的所有 HTML 元素使用相同的 id;您应该使用相对路由而不是 document.querySelector,或者为每个产品设置单独的 ids

    【讨论】:

    • 不是“”而是“必须”有唯一的ID
    • 如果您关心以下规格,它们必须具有唯一的 id(尽管您应该承认),但是由于已经多次讨论过,实际上只要您知道哪些规格可能并不重要重复,他们在哪里,以及如何对待它。如果他没有使用唯一 ID,例如 querySelector,它会起作用(假设没有更多问题),即使它违反规范
    • 这不是没有选择,你必须使用规范
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多