You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取点击按钮的data属性值并在AJAX表单提交中使用?

解决点击按钮获取data-id并在AJAX中使用的问题

我来帮你搞定这个问题~你现在的代码没法正确拿到点击按钮的data-id,核心问题是你用了所有按钮的集合cartButton去取dataset.id,但它根本不是单个被点击的元素。下面是具体的修改步骤:

1. 在点击事件中获取当前按钮的data-id

首先修改addToCard函数,利用事件回调里的this(它指向当前被点击的按钮)拿到data-id,然后把这个ID传递给后续的用户/访客添加购物车函数:

function addToCard() {
  // 拿到当前点击按钮的data-id
  const productId = this.dataset.id;
  $.ajax({
    url: "/auth/check",
    context: document.body,
    success: function(status){
      if (status === "Auth") {
        addToCardForUsers(productId); // 把ID传进去
      } else {
        addToCardForGuests(productId); // 访客函数也同理传递ID
      }
    }
  });
}

2. 修改用户添加购物车函数接收并使用ID

接下来调整addToCardForUsers函数,让它接收传递过来的productId,然后在AJAX的URL里使用这个值:

function addToCardForUsers(productId) {
  $.ajax({
    type: 'POST',
    url: "/cart/add-product/" + productId, // 这里用传递过来的ID
    context: document.body,
    headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    success: function(){
      // 先确保countProduct是正确的DOM元素(替换成你实际的选择器即可)
      const countProduct = $('.cart-product-count');
      if (!countProduct.text()) {
        countProduct.text(1);
      } else {
        let countProducts = Number(countProduct.text());
        countProducts++;
        countProduct.text(countProducts);
      }
      Flash.success("Product succesfully added to your cart");
    }
  });
}

为什么原来的代码不行?

你之前用const cartButton = document.getElementsByClassName('add-to-card-button');拿到的是所有带这个类的按钮的集合,不是单个元素,所以cartButton.dataset.id是不存在的。必须在点击事件的回调里,通过this获取到当前被点击的那个按钮,才能拿到对应的data-id。

另外补充一点:你的代码里countProduct看起来没有提前定义,最好在函数里明确用选择器获取对应的DOM元素,避免出现未定义的报错。

内容的提问来源于stack exchange,提问作者user9127206

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:06:29