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

jQuery获取data-variant-id属性返回undefined该怎么处理?

问题原因

你给按钮内部新增了<i>图标标签后,点击操作的实际触发目标(e.target)是内层的<i>元素而非外层绑定了data-variant-id的button元素,<i>标签上没有对应的自定义属性,所以读取值为undefined。

解决方案

直接修改事件回调中获取目标元素的逻辑即可,有两种常用实现方式:

  • 用e.currentTarget替代e.target:e.currentTarget指向的是绑定了当前点击事件的元素,也就是你要取属性的外层button,不受内部子元素点击的影响。
  • 直接用事件回调自带的this指向:jQuery的事件回调中,this默认指向绑定事件的DOM元素,直接读取即可,也可以搭配jQuery的data()方法书写为$(this).data('variant-id')。

修正后的JS代码示例

// Fake Shopify
const Shopify = {
  addItem (id, qty, cb) {
    console.log("Shopify.addItem - id: %s, qty: %i", id, qty)
    setTimeout(cb, 200)
  }
}

const refreshCart = () => console.log("refreshCart")

$('[data-variant-id]').each(function() {
  $(this).on('click', function(e) {
    e.preventDefault();
    // 替换为e.currentTarget即可
    var button = e.currentTarget
    var variantId = button.dataset.variantId

    console.log('variantId', variantId);

    // Add Item to cart
    Shopify.addItem(variantId, 1, function() {
      refreshCart();
      $('[data-drawer-trigger]')[0].click();
    })
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:48:03